C++:如果输入不是整数,为什么这段代码会运行一个无休止的循环
C++: Why does this code run an endless loop if the input was not integral?
我有一个简单的代码,可以通过使用引用或指针来复制字符串(我是初学者),我想让它确定输入是否是整数,因为如果不是,它会因为某种原因而保持循环。我试过使用cin.clear(),但似乎不起作用。。这是代码:
#include <iostream>
#include <string>
#include "test.h"
using namespace std;
int main() {
while (true) {
cout << "Type something: ";
string hi;
cin >> hi;
cout << "Choose a method to change it:n1. By reference.n2. By using pointers.n";
start:
int i;
cin >> i;
if (cin.fail())
cin.clear();
switch (i) {
case 1:
changestringref(hi);
cout << hi << 'n';
break;
case 2:
changestringptr(&hi);
cout << hi << 'n';
break;
default:
cout << "Choose by typing either 1 or 2: ";
goto start;
break;
}
}
}
每当我键入一个字符串(在第二次输入时),它都会循环这句话:"通过键入1或2选择:通过键入1和2选择:"等等。我该如何解决这个问题?为什么cin.clear不起作用?它不是应该清除上次使用cin时的输入吗?还是我错了?O.O
提前感谢:D
为什么cin.clear不起作用?它不是应该清除上次使用cin时的输入吗?还是我错了?
不完全是。它应该为流的内部错误状态标志设置一个新值。不带参数的clear()
设置goodbit
并清除fail()
状态,但保留任何未处理的输入
假设您输入了'x'
。由于'x'
不是数字,cin >> i
设置failbit
,不消耗输入(实际上,它将已经消耗的x
推回输入缓冲区,但那是另一回事)。
这是num_get::get()
中有些模糊的行为记录。返回的迭代器(即流)正好指向无法解析的第一个字符之前。
所以下一次,在goto start;
之后,您将再次读取x
。相同的输入,相同的结果,因此是无休止的循环。
相关文章:
- 如何运行一个类的多个对象,该类的函数仅在C++中调用线程?
- 仅在 boost::hash_combine 中运行一个程序期间保证确定性
- c++:运行一个函数 8 次,并将每个答案添加到数组或 JSON 中
- 助推.如何在另一个测试单元中运行一个测试组件
- 如何编译和运行一个新的 C++ Actor 框架项目?
- 我想重新运行一个线程
- 如何使用c ++代码来调用和运行一个现有的python文件?
- 我想用 c++ 运行一个 vtk 示例,但我不知道如何导入所需的数据
- 首先我已经成功安装了 caffe,但是当我运行一个 caffe 项目时,cmake 还可以,后来会发出很多错误
- 为什么我需要运行一个应用程序作为Papi库工作的根源
- C++:如何运行一个系统命令N次(异步)并返回N次执行时间
- 并行运行一个应用程序,同时用 C++ 启动另一个应用程序
- 从Ubuntu到Debian运行一个可执行文件
- 在 Apache 上运行一个 C++ CGI 程序
- C++:如果输入不是整数,为什么这段代码会运行一个无休止的循环
- 在solaris中运行一个可执行的c++程序
- 如何在C++中创建一个循环,运行一个计时器并允许用户同时输入(非阻塞用户输入)
- 无论如何,我可以在visualstudio2005上与visualstudio2015一起运行一个已经编码的项目吗
- 如何启动一个 boost::线程运行一个成员函数
- 如何在QtCreator(Linux Ubuntu)中编译和运行一个随机的单个C++文件