C++-方法退出

  • 本文关键字:退出 方法 C++- c++
  • 更新时间 :
  • 英文 :


我是c++的新手,我正在尝试编写一个程序,从主方法到案例选择,再到带有if选择的第二个方法。但第二个cin被跳过,程序在打印出文本后以Lobby方法退出。

#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 << "Quitn";   
}       
}
void Status(){
cout << "** Status **n";
//TODO
}
void Test(){
cout << "** Test **n";
//TODO  
}

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

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

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

第二个简单的解决方案是使用std::skipwsI/O操纵器,告诉输入流跳过所有空白:

cin >> skipws >> pcharchoice;

如果你只想要字符,并且不希望用户输入太多输入时出现任何问题,这是我推荐的解决方案。

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

cin >> pcharchoice;
cin.ignore((numeric_limits<streamsize>::max(), 'n');

这个解决方案有一个很大的优点,它不仅跳过空白,直到它通过行的末尾,还跳过用户在同一行上可能给出的任何额外输入。

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

最新更新