2010-10-01 20 views
5

thể trùng lặp:
Stupid Question Regarding If-Else's Simultaneous Execution in C++ or CCó khả năng thực hiện cả hai và nếu không một phần của câu lệnh kiểm soát if --- else?

Có thể đặt một số điều kiện, vì vậy mà cả hai nếu và một phần khác trong một tuyên bố kiểm soát else if ... có thể được thực hiện mà không cần bất kỳ cảnh báo hoặc lỗi ??

+6

Tôi hy vọng là không; và chữ NO của nó bằng tất cả các ngôn ngữ tôi biết. – NimChimpsky

+2

Điều đó sẽ không hoàn tác mục đích của một người khác? –

+5

Hãy thử và mô tả những gì vấn đề thực tế của bạn là thay vào đó, có vẻ như một giải pháp của nó đang tìm kiếm một vấn đề vào lúc này. –

Trả lời

4

Không, điều đó là không thể (trong cùng một quá trình).

9

Không, không có cách nào để viết mệnh đề Schrödinger nếu.

Bạn có thể thực thi cả hai bằng goto, nhưng nó sẽ không bao giờ vượt qua đánh giá mã.

+2

+1 cho Schrödinger: D –

+0

+1. Thi hành 0,4 nhánh đầu tiên và 0,6 nhánh thứ nhất. – sharptooth

26

Không sử dụng! ;-)

Có, bởi fork ing.

if (fork()) { 
    printf("if\n"); 
} 
else { 
    printf("else\n"); 
} 

Không có trường hợp sử dụng thực nào để thích mã trên, trừ khi nó được thực thi song song.

+2

Thông minh nhưng điều này chỉ gây nhầm lẫn cho vấn đề. –

+3

+1 ấn tượng ... nhưng tôi không biết đó là ấn tượng tốt hay xấu :) – pmg

+0

yughhhhhhhhhhhh –

1

Tôi cho rằng bạn đang cố gắng để có cả hai nhánh của loại câu lệnh này được thực thi?

Dim X As Boolean 
X = False 
If X = True Then 
    ... 
Else 
    ... 
End If 

Bạn thể nhận được nó để thực hiện sử dụng GoTo ... nhưng điều đó đi ngược lại thực hành lập trình tốt.

Dim X As Boolean 
X = False 
If X = True Then 
    ... 
    Goto ElseStuff 
Else 
    ElseStuff: 
    ... 
End If 

Thay vì đó bạn nên viết các thủ tục riêng biệt/chức năng để thực hiện hành vi mà bạn muốn có thực hiện trong cả hai câu lệnh ... hoặc đơn giản là đặt mã mà nên thực hiện trong mọi trường hợp ngoài của Nếu khối.

Điều đó sẽ có chức năng tương đương với việc sử dụng GoTo, cộng với việc làm cho nó rõ ràng với bất kỳ ai khác.

+0

Tôi sẽ nói rằng điều này đi ngược lại ... MỌI THỨ ... không chỉ thực hành lập trình goodp ;-) –

4

Vâng, nó có thể:

#include <stdio.h> 

#define else if (1) 
int main(void) 
{ 
    int test = 1; 

    if (test == 1) 
    { 
     printf("if\n"); 
    } 
    else 
    { 
     printf("else\n"); 
    } 

    return 0; 
} 
#undef else 

Một lưu ý cho người mới: Không bao giờ làm điều này trong thực tế đời sống! Thay vào đó, suy nghĩ về vấn đề của bạn một lần nữa ...

Những gì bạn có thể muốn là:

#include <stdio.h> 

int main(void) 
{ 
    int one_condition = 1; 
    int other_condition = 2; 

    if ((one_condition == 1) || (other_condition == 2)) 
    { 
     printf("if\n"); 
    } 

    if ((one_condition != 1) || (other_condition == 2)) 
    { 
     printf("quasi-else\n"); 
    } 

    return 0; 
} 

Bạn có thể thay thế khác-path bằng cách khác nếu mệnh đề với điều kiện phủ nhận. Điều này cho bạn khả năng ghi đè nó với điều kiện thứ hai.

2

Có thể bạn đã hiểu nhầm vấn đề của mình.

Nếu bạn muốn khối mã thực thi bất kể điều kiện, hãy lấy nó ra khỏi câu lệnh if ... else.

void foofunc(int n) 
{ 
    a = 44*n; 
    if(a == 484) 
    { 
     //do something 
    } 
    else 
    { 
     //do something if a DOES NOT equal 484 
    } 

    //do something regardless of the outcome of the test. 
} 

Trong ví dụ này, nực cười mặc dù nó là, dòng cuối cùng là bên ngoài tuyên bố tình trạng, như vậy sẽ thực hiện liệu một == 484 hay không, mà dường như với tôi để được giống như làm cho c kích hoạt else của bạn chặn bất kể thử nghiệm if thành công.

Tất nhiên, các khối khác không bắt buộc, vì vậy nếu bạn không quan tâm điều gì xảy ra nếu tình trạng của bạn không thành công, thì đơn giản là không có khối khác.

void foofunc(int n) 
{ 
    a = 44*n; 
    if(a == 484) 
    { 
     //do something 
    } 

    //do something regardless of the outcome of the test. 
} 
+0

+1 cho nỗ lực! –

Các vấn đề liên quan