visualc++进入了无尽的循环
visual c++ enters endless loop
下面是我的代码:
char name;
bool isValid = true;
int mode;
cout << "Enter name:" << endl;
cin >> name;
do
{
cout << "Choose a mode" << endl;
cin >> mode;
switch (mode)
{
case 1:
iniCharacter (name, 110, 100, 100);
break;
case 2:
iniCharacter (name, 100, 110, 100);
break;
case 3:
iniCharacter (name, 100, 100, 110);
break;
default:
isValid = false;
cout << "Invalid mode, ";
break;
}
}while (!isValid);
但当我运行上面的代码时,输出如下:
[output]Please enter name:
[input] test
[output] Invalid mode
[output] Invalid mode
[output] Invalid mode
[output] Invalid mode
[output] Invalid mode
...
为什么即使我没有开始向模式输入值,代码也会导致循环?
程序不应该等待用户输入"模式"吗?
将"name"的类型更改为"string">
您可能需要在循环顶部将isValid
设置为true,以说明在尝试失败后输入有效输入的情况:
isValid = true;
非常简单的
只需将名称声明更改为
char name[10] // assuming your name would be 10 characters long.
整个程序会运行得很好。
希望能有所帮助。
它将n
留在缓冲区中在do
循环之前尝试while(cin.get()!='n');
使用下面的代码,它将起作用-
char name[100] = {0};
bool isValid = true;
int mode;
cout << "Enter name:" << endl;
cin >> name;
do
{
cout << "Choose a mode" << endl;
cin >> mode;
switch (mode)
{
case 1:
iniCharacter (name, 110, 100, 100);
break;
case 2:
iniCharacter (name, 100, 110, 100);
break;
case 3:
iniCharacter (name, 100, 100, 110);
break;
default:
isValid = false;
cout << "Invalid mode, ";
break;
}
}while (!isValid);
原因:
由于您将名称声明为单个字符,并且用户输入了多个字符,即"test",所以第一个字符被分配给名称,其余字符按原样放置在缓冲区中,因为这些不是整数,cin不想在控制台上问您。因此,int即mode将只具有其初始垃圾值。
然而,也显示了第二个输出,即"选择模式",但您的控制台缓冲区被该错误淹没,因此您甚至无法看到。
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- 无尽的循环
- 无尽的循环分裂矢量
- C vs Java:无尽的循环创建对象仅崩溃C
- C 无尽的循环在树上递归时
- 带有输入的C++无尽循环
- 无尽的include循环
- visualc++进入了无尽的循环