2015-02-07 104 views
0

我是一名C++程序員,這只是我的第二個程序...這是美元和歐元之間的簡單貨幣轉換器。我遇到的問題是,如果我輸入一個NaN值,它會這樣說,然後再問,但是退出。有誰知道如何讓它等到用戶鍵入其他東西?也在第二個cin >> user_dollar我收到一個錯誤,說:「引用重載函數無法解析;你的意思是打電話嗎?「對不起,這是如此之長,謝謝〜接收到NaN輸入後,C++程序再次要求輸入,然後退出

這是我的代碼。我在MacBook Pro上使用Xcode。

#include <iostream> 
using namespace std; 


int main() { 
    string choice; 
    int user_dollar; 
    int user_euro; 

    cout << "Dollars to Euros (type ‘Dollars’) or Euros to dollars (type ‘Euros’)? "; 
    cin >> choice; 

    if (choice == "Dollars" || choice == "dollars") { 

     cout << "Enter dollar amount: "; 
     cin >> user_dollar; 
      if (isdigit(user_dollar) != true){ 
       cout << "That’s not a number... " << endl; 
       cout << "Enter dollar amount: " << endl; 
       *cin >> user_dollar;* 
       } 
      else { 
       cout << "That is " << user_dollar/1.13 << " Euros." << endl; 
       } 

    } 

    else if (choice == "Euros" || choice == "euros") { 

     cout << "Enter Euro amount: "; 
     cin >> user_euro; 

     cout << "That is " << user_euro * 0.89 << " dollars." << endl; 

    } 
} 
+0

1.你的程序沒有循環。你希望它問'while'事情是真的。 2.閱讀「std :: isdigit」的規範。 – philipxy 2015-02-07 00:41:59

+0

嗨,感謝您的快速回復!如果我把'while'而不是'if'表示只是打印出「這不是一個數字......」和「輸入美元金額:」無休止地。另外我不確定'std :: isdigit'是什麼意思... – Minnow 2015-02-07 00:56:45

+0

1.決定何時停止。沒有那個循環。 (在一個循環內部做你想做的事情,確保底部已經準備好進行下一個測試。)2. isnan(x)表示x!= x表示x是NaN。搜索重新使用std :: isnan。 3.使用std :: isdigit重新搜索。 4.使用std :: cin重新搜索。除非你知道它的作用,否則不要調用函數。否則,你爲什麼要打電話? (修辭) – philipxy 2015-02-07 01:28:02

回答

0

你需要第二次使用的cin前沖洗cin緩衝區。像

cin.clear(); 
cin.ignore(INT_MAX,'\n'); 
cin >> user_dollar; 

東西看看這個thread上刷新緩衝區的更多細節。

0

由於user_dollar變量的類型是int,因此它只能包含一個整數。如果有人輸入除數字之外的東西(如「hi」),則不能存儲在user_dollar中。

當您撥打cin >> user_dollar,並且用戶輸入非數字時,它會失敗並且不會更改user_dollar。由於沒有其他設置user_dollar在那一點上,它可能是任何東西 - 半隨機垃圾。您目前正在使用isdigit()檢查垃圾。並且isdigit()不用於檢查使用cin直接讀取的整數。

您可以檢查它未能通過調用fail()閱讀數,使用clear()復位是否出現了錯誤,並ignore()刷新緩衝區爲伊戈爾表示。

正如philipxy所說,您可以使用while循環繼續詢問,直到成功讀取一個數字。

相關問題