以下是我的代码:
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
...
为什么即使我没有开始向模式输入值,代码也会导致循环?
程序是否应该等待用户输入“模式”?
答案 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)
它在缓冲区中留下\n
在while(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模式将仅具有其初始垃圾值。
此外还显示了第二个输出,即“选择模式”,但您的控制台缓冲区充斥着该错误,因此您甚至无法看到它。