2013-03-02 75 views
0

你可以請修復這個程序。它不會z。爲什麼不是我的聲明工作

int main() 
{ 
    using namespace std; 
    int x, y, z, a; 
    cout << "Please enter a number" << endl; 
    cin >> x; 
    cout << "Please enter another number" << endl; 
    cin >> y; 
    cout << "What do you want to do with these numbers?" << endl; 
    cout << "1 = +" << endl; 
    cout << "2 = -" << endl; 
    cout << "3 = *" << endl; 
    cout << "4 = /" << endl; 
    cin >> a; 

    do { 
     z = add(x, y); 
    } while (a == 1); 

    do { 
     z = sub(x, y); 
    } while (a == 2); 

    do { 
     z = mul(x, y); 
    } while (a == 3); 

    do { 
     z = dis(x, y); 
    } while (a == 4); 

    cout << z; 
    return 0; 
} 

我試過使用do while語句,但是我無法讓它工作。 ---編輯--- 添加了正確的縮進,爲什麼不自動這樣做?

+0

u可以使用wwitch – PSR 2013-03-02 10:04:32

+0

@PSR咦?我不明白。請提供更多細節。 – Lemonizer 2013-03-02 10:06:06

+2

您的循環不會修改'a'。所以如果它進入一個循環,它將永遠不會出去。 – Barmar 2013-03-02 10:06:19

回答

2

你進入哪個選項,它要進入的是do-while循環,永不退出,因爲該條件將始終得到滿足。防爆。如果我輸入1,那麼它將輸入:

do { 
    z = add(x, y); 
} while (a == 1); 

因爲a總是1,所以它永遠不會退出這個。其他條件也是如此。相反,你可以使用switch語句。例如:

switch(a) { 
    case 1 : z = add(x, y); 
      break; 
    case 2 : z = sub(x, y); 
      break; 
    case 3 : z = mul(x, y); 
      break; 
    case 4 : z = div(x, y); 
      break; 
    default : cout<<"Please choose a valid option to proceed."; 
} 
cout << z; 
return 0; 

另外,在這種情況下,您不要使用do-while。即使你退出循環,它總是會將(x,y)分開,因爲do-while是進入的,然後是次要的檢查條件。然而,你可以使用while循環是這樣的:

while(a==1) { 
    z = add(x, y); 
    a = -1; 
} 

while(a==2) { 
    z = sub(x, y); 
    a = -1; 
} 

while(a==3) { 
    z = mul(x, y); 
    a = -1; 
} 

while(a==4) { 
    z = div(x, y); 
    a = -1; 
} 
+0

謝謝!這個switch語句非常酷。我會玩一下它。另外,我注意到你使用div(x,y),但是,我無法使用div,我只能使用dis。所以在我的代碼中,它的dis(x,y)。這是什麼原因?是div很忙還是什麼? – Lemonizer 2013-03-02 10:18:57

+0

sry它是一個錯字:)你可以請。標記答案。如果您的問題得到解決,這是正確的TNKS。 – lokoko 2013-03-02 10:20:18

-1

您的代碼進入一個無限循環,修改它像這樣

int main() 
{ 
using namespace std; 
int x, y, z, a; 
do 
{ 
cout << "Please enter a number" << endl; 
cin >> x; 
cout << "Please enter another number" << endl; 
cin >> y; 
cout << "What do you want to do with these numbers?" << endl; 
cout << "1 = +" << endl; 
cout << "2 = -" << endl; 
cout << "3 = *" << endl; 
cout << "4 = /" << endl; 
cin >> a; 
switch(a) 
{ 
    case 1: 
    z = add(x, y); 
    break; 
    case 2: 
    z = sub(x, y); 
    break; 
    case 3: 
    z = mul(x, y); 
    break; 
    case 4: 
    z = dis(x, y); 
    break; 
} 
cout << z; 
} while(1 >= a <= 4) 
return 0; 
} 

修改爲每lokoko的建議

+1

你不需要這麼多if語句。這就是爲什麼有一個開關櫃。 – lokoko 2013-03-02 10:07:40

+0

謝謝你的回答。它確實幫助我,但是如果我真的想使用它,有什麼方法可以使用do while語句嗎? – Lemonizer 2013-03-02 10:10:13

+0

如果你真的想保留你的舊代碼並避免無限循環,試試這個函數:add = {x,y}; a = 5; } while(a == 1); – Premsuraj 2013-03-02 10:14:10

0

聲明:

while(1 >= a <= 4) 

是不正確[嗯,這是正確的C語法,但它是最有可能不是你想要的,因爲它]:

while((1 >= a) <= 4); 

而且由於(1 >= a)結果是要麼01,它始終是<= 4。你需要做的:

while ((1 >= a) && (a <= 4)); 

[括號只是爲了清楚起見,可以去掉括號的兩個內套]

相關問題