以前我是一名C程序员(想了解更多关于系统编程的信息,但不想进入汇编,所以我选择了C)更多,但后来在我的大学我必须学习C ++,我实际上很难使用cin
和cout
对象的时间与我在C中的受信任printf()
,scanf()
,getchar()
宏相比有一些变化。这是代码。
守则
int main(void)
{
using namespace std;
cout << "What is the number?\n\n";
cout << "#Number :";
cin >> num;
while(cin.fail())
{
cin.clear();
cin.ignore(1000 , '\n');
cout << "Please enter a number\n\n";
cout << "#Number :";
cin >> num;
}
return 0;
}
问题
1.)我希望此代码向用户请求一个数字(小于和大于或等于0),当用户输入一个字符或字符串时,我希望它提醒用户有关它,清除输入缓冲区并重新启动用户一个新值,直到它是一个数字。
2.)所以我只是谷歌搜索并找到一个宣讲该方法的页面,所以我只是按照方式但它失败了。我不知道为什么一旦我运行这个代码,输入一个字符就会导致输出Please enter a number
的无限循环。我在这段代码中做错了什么?
感谢您花时间阅读我的问题
P / S:我正在使用CodeBlocks和minGW编译器。
答案 0 :(得分:2)
你没有说它失败了,所以很难说出你的问题
是。您从未声明num
这一事实是一个明显的问题。和
如果您输入的行长度超过1000个字符,则会失败。
C ++中更惯用的解决方案是使用std::getline
逐行读取输入,然后使用std::istringstream
将行转换为数字。
答案 1 :(得分:0)
使用格式输入的标准方法是对操作本身进行条件检查。此外,您将需要读取整行并尝试解析该行而不是通过令牌提取令牌。例如。像这样:
int num;
for (bool success = false; !success; )
{
std::cout << "Please enter a number: ";
std::string line;
if (std::cin >> line)
{
std::istringstream iss(line);
if (iss >> num) success = true;
}
if (!success) { std::cout << "Error!\n"; }
}
std::cout << "Thank you. You said: " << num << std::endl;
随意在错误分支中添加更多诊断输出。