在 C++ 中使用 char 变量执行 switch 语句
switch statement over performing with char variable in c++
#include<iostream>
using namespace std;
void fun() {
while(1) {
char choice;
cout<<"(D)isplay, (E)xit"<<endl;
start:
cout<<">> ";
cin>>choice;
switch(choice) {
case 'd':
case 'D':
cout<<"hello world"<<endl;
break;
case 'e':
case 'E':
return;
default:
cout<<"INVALID!"<<endl;
goto start;
}
}
}
int main() {
system("clear");
fun();
return 0;
}
这是一个简单的c++程序。
我面临以下问题:
(D)isplay, (E)xit
>> mnop
INVALID!
>> INVALID!
>> INVALID!
>> INVALID!
>>
符号“>>”提示用户输入一个字符并给出适当的结果,但如果输入一个字符串,它的行为类似于这样。我想知道为什么会发生这种情况以及如何阻止它:)
尝试在获取您的值后调用 cin.clear()
,也可能 cin.ignore(INT_MAX)
。这将为您清除缓冲区。
您正在接受用户输入的字符。 Char 仅表示一个字符,因此如果您输入一个字符串,如“mnop”,则其中有四个字符。每个都被视为单独的输入,因此您会得到“无效!”四次。
一种解决方案是获取字符串输入并首先检查该输入的长度。如果它大于 1,则忽略它,否则检查它是 'D' 还是 'E'.
您也可以使用 getch() 函数。它限制用户只能输入一个字符。
#include <stdio.h>
#include <conio.h>
char ch = getch();
您的代码按照您的指示执行,但不会更多:cin>>choice;
读取单个字符。当用户键入多个字符时,其他字符将留在流中,并在下一次调用时读取。
如果您想正确处理多个字符的输入,那么您需要从流中提取多个字符。例如:
while (true) {
std::string input;
std::cin >> input;
if (input.size() > 1 || input.size() == 0) {
std::cout << "enter only a single character\n";
} else {
choice = input[0];
break;
}
}
或者,您可以在读取一个 and/or 后检查流中是否还有更多字符,只需丢弃它们(通过 ignore
)。
cin >> choice ,您只读了一个字符。剩余的字符保留在缓冲区中,并在您再次调用 cin >> choice 时读取。试试 string asdf 然后你会看到输出。
您可以使用 cin.read();
刷新 std 或简单地读取所有剩余的字符
通过读取所有字符基本上清除输入缓冲区。
#include<iostream>
using namespace std;
void fun() {
while(1) {
char choice;
cout<<"(D)isplay, (E)xit"<<endl;
start:
cout<<">> ";
cin>>choice;
switch(choice) {
case 'd':
case 'D':
cout<<"hello world"<<endl;
break;
case 'e':
case 'E':
return;
default:
cout<<"INVALID!"<<endl;
goto start;
}
}
}
int main() {
system("clear");
fun();
return 0;
}
这是一个简单的c++程序。 我面临以下问题:
(D)isplay, (E)xit
>> mnop
INVALID!
>> INVALID!
>> INVALID!
>> INVALID!
>>
符号“>>”提示用户输入一个字符并给出适当的结果,但如果输入一个字符串,它的行为类似于这样。我想知道为什么会发生这种情况以及如何阻止它:)
尝试在获取您的值后调用 cin.clear()
,也可能 cin.ignore(INT_MAX)
。这将为您清除缓冲区。
您正在接受用户输入的字符。 Char 仅表示一个字符,因此如果您输入一个字符串,如“mnop”,则其中有四个字符。每个都被视为单独的输入,因此您会得到“无效!”四次。
一种解决方案是获取字符串输入并首先检查该输入的长度。如果它大于 1,则忽略它,否则检查它是 'D' 还是 'E'.
您也可以使用 getch() 函数。它限制用户只能输入一个字符。
#include <stdio.h>
#include <conio.h>
char ch = getch();
您的代码按照您的指示执行,但不会更多:cin>>choice;
读取单个字符。当用户键入多个字符时,其他字符将留在流中,并在下一次调用时读取。
如果您想正确处理多个字符的输入,那么您需要从流中提取多个字符。例如:
while (true) {
std::string input;
std::cin >> input;
if (input.size() > 1 || input.size() == 0) {
std::cout << "enter only a single character\n";
} else {
choice = input[0];
break;
}
}
或者,您可以在读取一个 and/or 后检查流中是否还有更多字符,只需丢弃它们(通过 ignore
)。
cin >> choice ,您只读了一个字符。剩余的字符保留在缓冲区中,并在您再次调用 cin >> choice 时读取。试试 string asdf 然后你会看到输出。
您可以使用 cin.read();
刷新 std 或简单地读取所有剩余的字符通过读取所有字符基本上清除输入缓冲区。