2013-01-04 30 views
0

的錯誤是,當我運行該程序,並鍵入n結束選擇 它並沒有結束,並不斷重複第一cout,默認值爲:做一段時間,開關故障

#include <iostream> 
using namespace std; 

int main() 
{ 
    int x; 
    float y,result=0,paid,change; 
    do { 
     cout<<"enter another choose or press (n/N) to end choosing "; 
     cin>>x; 
     switch (x) 
     { 
     case 1: 
      { 
       int a=5;  
       cout<<"enter the wighte you want in (Kg) : "; 
       cin>>y; 
       result=a*y; 
       break;} 
     default: 
      cout<<"wrong choooose "<<endl; 
     } 

    } 
    while (x='n'); 
    cout<<"your total= "<<result<<endl; 
    cout<<"mony value paid = "; 
    cin>>paid; 
    change =paid-result; 
    cout<<"the change = "<<change<<endl; 
    return 0; 
} 
+2

如果你想n結束它,你忘了! (假設你打算把它變成一個角色,因爲這就是你正在閱讀的內容)。您還輸出n和N都是有效的,但想象一下當N不工作時用戶的困惑! – chris

+0

ive添加了!但它也沒有工作,忘了N I只想用n個 –

回答

2

的問題是, x是一個整數,然後您將其與字符文字進行比較。

使用時,這非常舊的C風格的標準I/O,它採用int,而不是char,但在C不起作用++在類型是不同的。這意味着線上的輸入

cin>>x; 

如果不輸入有效整數將會失敗。

x的類型更改爲char,它應該可以工作。

此外,還存在轉讓問題,而不是while中的條件。

+0

確定這就是冷靜,但我怎麼能做到這一點 –

+0

如果我聲明x作爲一個char它在開關 –

+0

@SmiLe ......不會起作用,因爲那麼' x'是一個'char'而不是一個整數。你可以使用'case'1':'如果你想'x'能夠包含任何字符。如果你想在將來添加這些數字,這將不適用於多位數字,所以你可能想重新思考如何處理輸入。 (['std :: getline'](http://en.cppreference.com/w/cpp/string/basic_string/getline)和['std :: istringstream'](http://en.cppreference.com/ w/cpp/io/basic_istringstream)可能會幫助你。記得檢查輸入操作的結果!) –

2

對不起,我完全錯過了你在這裏使用C++ I/O。

您聲明xint,但您輸入了字符文字'n'。 C++ I/O流將導致轉換失敗,因此從不設置x。不要混淆你的數據類型;如果您想閱讀char,請閱讀char,與int相同。

嘗試這樣代替:

int x = 0; 
do { 
    if(!(cin >> x)) { 
     cout << "enter a valid number" << endl; 
     // clear fail flag 
     cin.clear();  
     // consume newline 
     cin.ignore(std::numeric_limits<streamsize>::max(), '\n'); 
    } else { 
     // your logic here 
    } 
} while(x != -1); 

while (x='n'); 

這不是一個比較,它是一個任務,當轉換成整數的字符'n'將始終評估爲true,所以你的循環不會結束。

你的下一個問題將是您要退出循環,當輸入'n',而不是其他方式,所以它應該是...

while(x != 'n'); 

還應認識到,如果用戶輸入110,循環將退出。 xint,並且字符文字'n'的整數值是110。它也將失敗'N'

+0

它不工作我試過了B4 –

+0

@SmiLe ...:對不起,我完全錯過了你使用C++ IO在這裏。你將x聲明爲int,但是你輸入了字符'n'。使用C++ IO流轉換將失敗,所以x從不設置。不要混淆你的數據類型;如果你想讀取一個字符然後讀取一個字符,同樣的int。 –

+0

好的,我也注意到了,但是我怎樣才能做到這一點,當輸入n完成循環 –