2013-05-19 56 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