代码片段在某些情况下有效,但不符合预期,为什么
Code Snippet Works in Certain Cases but not as Expected, Why?
我有这个代码片段,应该测试用户是否输入整数。如果用户输入字母,但不是小数,这就可以工作,我想知道为什么会这样。这是我的代码片段:
Student student;
int id;
while(!(cin >> id))
{
cout << "nERROR: Please enter a Positive Whole Number" << endl;
cin.clear();
cin.ignore ();
cout << "Enter Student ID: ";
}
输入 A
将使其遍历 while 循环,但如果我输入 12.5
它会退出 while 循环并继续前进。它不是在测试它是否会解析为整数吗?为什么它接受12.5
而不是角色?
只要
cin>>id
找到可以转换为int
的东西(在本例中为"12"),它就会成功。当它到达无法转换的内容时,它会停止,但如果它已经读取了int
,那就算成功了。
要检查它读取的所有内容是否都是数字,您可能需要执行一些操作,例如使用 std::getline
将一行输入读取到字符串中,然后使用 std::isdigit
来测试这些是否都是数字。测试对int
的转换(本身)只会告诉您它找到了可以读取为整数的内容,但不会告诉您后面是否跟着其他无法转换为int
的内容。
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 而循环:简单的除法程序输出零,不明白为什么
- 不理解为什么代码没有产生所需的答案
- 我不知道为什么这段代码会让核心被转储?
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- C++复制 c'tor 现在确实会采取行动。 不清楚为什么
- 反转字符串.不知道为什么这个逻辑是错误的.C++
- 没有函数模板的实例与我不知道为什么的参数列表匹配
- 什么是非营利组织???我的问题是我不明白为什么有人会使用它
- 为什么此模板函数的行为不符合预期?
- 为什么 std::basic_ostream::运算符<<不符合 CONST 资格?
- 为什么 std::future::wait_for 的行为不符合预期?
- 为什么std::is_copy_constructible的行为不符合预期
- 为什么 [std::is_move_assignable] 的行为不符合预期?
- 代码片段在某些情况下有效,但不符合预期,为什么
- 为什么根据 C++11 标准,std::seed_seq是不可复制的,为什么 gcc/clang 不符合?
- 为什么带有引用的类不符合standard_layout
- 为什么函数乐趣不符合 ADL 的条件
- 为什么const_cast的行为不符合预期