2013-05-19 43 views
1

我正在編寫一個基本的隨機數猜測遊戲,我試圖完善它,當涉及到輸入非法字符時,只要輸入範圍在1-100之外的數字該程序會告訴用戶,用戶可以重做,同樣也可以使用字母。但是,如果您輸入23x5,則最終會出現雙重錯誤消息,您將得到字母和太高/太低,具體取決於隨機數。我該如何對它進行排序,以便該條目也會出現在字母錯誤消息之下?程序返回多個結果

這裏是我的代碼: Header.h

#ifndef HEADER_H 
#define HEADER_H 

int nGuessedNumber; 
int nNumberOfGuesses = 1; 
int nRandomNumber; 

int UserInput(); 


#endif 

Source.cpp

#include "stdafx.h" 
#include <iostream> 
#include <cstdlib> 
#include <ctime> 
using namespace std; 

extern int nGuessedNumber; 

int UserInput() 
{ 
    while(!(cin >> nGuessedNumber)) 
     { 
      cin.clear(); 
      while(cin.get() != '\n'){} 

      cout << "I asked for a number between 1 and 100.\n"; 
     } 
    return nGuessedNumber; 
} 

的main.cpp

#include "stdafx.h" 
#include <iostream> 
#include <cstdlib> 
#include <ctime> 
#include "Header.h" 
using namespace std; 

int main() 
{ 
    srand(time(0)); 
    nRandomNumber = rand() % 100 + 1;// sets random number between 1 and 100 

    cout << "Guess a number from 1 too 100: " << endl; 
    UserInput(); 

    while (nGuessedNumber != nRandomNumber) 
    { 
     if ((nGuessedNumber < 1) || (nGuessedNumber > 100)) 
     { 
      cout << "Oi! Between 1 and 100!\n"; 
      UserInput(); 
     } 
     else 
     { 
      if (nGuessedNumber < nRandomNumber) 
      { 
       for (nGuessedNumber; nGuessedNumber < nRandomNumber; nNumberOfGuesses++) 
       { 
        cout << "Too low, try again!" <<endl; 
        UserInput(); 
       } 
      } 
      else if (nGuessedNumber > nRandomNumber) 
      { 
       for (nGuessedNumber; nGuessedNumber > nRandomNumber; nNumberOfGuesses++) 
       { 
        cout << "Too high, try again!"<< endl; 
        UserInput(); 
       } 
      } 
     } 
    } 
    if (nGuessedNumber == nRandomNumber) 
    { 
     cout << "Congratulations! " << nGuessedNumber << " is correct!" << endl; 
     cout << "You guessed " << nNumberOfGuesses << " times." << endl; 
    } 
    system("PAUSE"); 
    return 0; 
} 
+0

只是想知道 - 沒有任何理由使用C++這個解決方案? –

+0

順便說一句'Header.h'必須包含聲明,並且一些'.cpp'文件必須包含定義,而不是其他方式([link](http://stackoverflow.com/a/1410632/509868)) – anatolyg

回答

2

std::cin閱讀整行和分析它們單獨使用std::istringstream

int UserInput() 
{ 
    std::string line; 
    while (getline(std::cin, line)) { 
     std::istringstream is(line); 
     if (is >> nGuessedNumber) { 
      ... 
      return nGuessedNumber; 
     } else { 
      ... 
     } 
    } 
} 
+0

1> Source.cpp(27):error C2079:'is'使用未定義的類'std :: basic_istringstream <_Elem,_Traits,_Alloc>' – Jon

+0

@Jon:'#include '? – nosid