c ++进入无限循环

时间:2013-03-29 14:08:59

标签: c++ visual-c++

以下是我的代码:

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


...

为什么即使我没有开始向模式输入值,代码也会导致循环?

程序是否应该等待用户输入“模式”?

5 个答案:

答案 0 :(得分:1)

您可能需要在循环顶部将isValid设置为true,以便在尝试失败后输入有效输入时考虑:

isValid = true;

答案 1 :(得分:1)

将'name'的类型更改为'string'

答案 2 :(得分:0)

非常简单

只需将名称声明更改为

即可
char name[10]  // assuming your name would be 10 characters long.

整个程序运行得很好。

希望它有所帮助。

答案 3 :(得分:0)

它在缓冲区中留下\nwhile(cin.get()!='\n'); 循环

之前尝试do

答案 4 :(得分:0)

使用下面的代码 -

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 ie模式将仅具有其初始垃圾值。

  • 此外还显示了第二个输出,即“选择模式”,但您的控制台缓冲区充斥着该错误,因此您甚至无法看到它。