C++;-方法出口 我是C++的新手,我尝试编写一个程序,它从主方法到案例选择,而不是用IF选择的第二个方法。 但是第二个cin被跳过,程序在打印文本后退出方法大厅 #include <iostream> #include <stdlib.h> #include <time.h> using namespace std; void Char(); void Lobby(); void Status(); void Test(); int i; char c; char pcharchoice; int money; char pname; int main() { cout << "$$ Test $$\n"; Char(); } void Char(){ cout << "Select :\n"; cout << "1 : Test1 \n"; cout << "2 : Test2 \n"; cin >> pcharchoice; cout << "\n"; switch (pcharchoice) { case '1': money = 1000; break; case '2': money = 2500; break; default: exit(0); break; } cout << "Select a Name:\n"; cin >> pname; Lobby(); } void Lobby(){ i = 0; cout << "What would do ? \n"; cout << "1 : Status \n"; cout << "2 : Test \n"; cout << "3 : Leave \n"; cin >> i; cout << "\n"; if( i == 1 ) { Status(); } else if( i == 2 ){ Test(); } else if ( i == 3 ){ cout << "Quit\n"; } } void Status(){ cout << "** Status **\n"; //TODO } void Test(){ cout << "** Test **\n"; //TODO } #包括 #包括 #包括 使用名称空间std; void Char(); 无效大厅(); 无效状态(); 无效试验(); int i; 字符c; 字符选择; 国际货币; 字符名; int main(){ cout

C++;-方法出口 我是C++的新手,我尝试编写一个程序,它从主方法到案例选择,而不是用IF选择的第二个方法。 但是第二个cin被跳过,程序在打印文本后退出方法大厅 #include <iostream> #include <stdlib.h> #include <time.h> using namespace std; void Char(); void Lobby(); void Status(); void Test(); int i; char c; char pcharchoice; int money; char pname; int main() { cout << "$$ Test $$\n"; Char(); } void Char(){ cout << "Select :\n"; cout << "1 : Test1 \n"; cout << "2 : Test2 \n"; cin >> pcharchoice; cout << "\n"; switch (pcharchoice) { case '1': money = 1000; break; case '2': money = 2500; break; default: exit(0); break; } cout << "Select a Name:\n"; cin >> pname; Lobby(); } void Lobby(){ i = 0; cout << "What would do ? \n"; cout << "1 : Status \n"; cout << "2 : Test \n"; cout << "3 : Leave \n"; cin >> i; cout << "\n"; if( i == 1 ) { Status(); } else if( i == 2 ){ Test(); } else if ( i == 3 ){ cout << "Quit\n"; } } void Status(){ cout << "** Status **\n"; //TODO } void Test(){ cout << "** Test **\n"; //TODO } #包括 #包括 #包括 使用名称空间std; void Char(); 无效大厅(); 无效状态(); 无效试验(); int i; 字符c; 字符选择; 国际货币; 字符名; int main(){ cout,c++,C++,使用std::cin和>运算符读取字符时,您会读取一个字符。问题是您输入了两个输入字符:实际字符和用于终止当前输入的换行符 该换行符仍在输入缓冲区中,您读取的下一个字符将是该换行符。这是因为读取单个字符会读取输入缓冲区中的确切字符,不会跳过空白 有两种简单的方法可以解决这个问题,还有两种更复杂的方法。第一种简单的方法是不读取字符,而是读取字符串,因为输入操作符>将跳过前导空格,例如换行符 第二个简单的解决方案是使用,告诉输入流跳过所有空白: cin >> skipws >>

使用
std::cin
>
运算符读取字符时,您会读取一个字符。问题是您输入了两个输入字符:实际字符和用于终止当前输入的换行符

该换行符仍在输入缓冲区中,您读取的下一个字符将是该换行符。这是因为读取单个字符会读取输入缓冲区中的确切字符,不会跳过空白

有两种简单的方法可以解决这个问题,还有两种更复杂的方法。第一种简单的方法是不读取字符,而是读取字符串,因为输入操作符
>
将跳过前导空格,例如换行符

第二个简单的解决方案是使用,告诉输入流跳过所有空白:

cin >> skipws >> pcharchoice;
如果您只需要字符,并且不希望用户输入太多输入时出现任何问题,那么这就是我推荐的解决方案

第一个稍微复杂一点的方法是使用函数跳过换行:

cin >> pcharchoice;
cin.ignore((numeric_limits<streamsize>::max(), '\n');
cin>>pcharchoice;
cin.ignore((数值限制::max(),'\n');
此解决方案有一个很大的优势,即它不仅跳过空白,直到它通过行的末尾,它还跳过用户可能在同一行上提供的任何额外输入


第二种稍微复杂一点的方法是将整行读入字符串,然后从该行中获取字符(可以使用字符串的索引
0
,也可以使用
std::istringstream
和“普通”格式的输入运算符).

我认为它没有被跳过。它应该读取换行符。请尝试打印出您在
pcharchoice
中的值。读取换行符是错误的,但是。问题似乎更严重:默认情况下,格式化的输入跳过空白。似乎有什么东西从流中取消了
skipsw
标记。