visualc++进入了无尽的循环

visual c++ enters endless loop

本文关键字:循环 无尽 visualc++      更新时间:2023-10-16

下面是我的代码:

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将只具有其初始垃圾值。

  • 然而,也显示了第二个输出,即"选择模式",但您的控制台缓冲区被该错误淹没,因此您甚至无法看到。