[英]C++ - Method exit
我是c ++的新手,我正在嘗試編寫一個程序,從main方法到case-choice,再到第二個帶if-choice的方法。 但是在打印出文本后,第二個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 << "Quit\n";
}
}
void Status(){
cout << "** Status **\n";
//TODO
}
void Test(){
cout << "** Test **\n";
//TODO
}
使用std::cin
和>>
運算符讀取字符時,您會讀取一個字符。 問題是輸入兩個輸入字符:實際字符和用於終止當前輸入的換行符。
該換行符仍在輸入緩沖區中,您讀取的下一個字符將是該換行符。 這是因為讀取單個字符會讀取輸入緩沖區中的確切字符,因此不會跳過空白區域。
有兩種簡單的方法可以解決這個問題,還有兩種更復雜的方法。 第一種簡單的方法是不讀取字符,而是讀取字符串 ,因為輸入操作符>>
將跳過前導空格,例如換行符。
第二個簡單的解決方案是使用std::skipws
I / O操縱器 ,告訴輸入流跳過所有空格:
cin >> skipws >> pcharchoice;
如果您只是想要字符並且不希望用戶輸入任何輸入有任何問題,這是我推薦的解決方案。
第一個更復雜的方法是使用std::istream::ignore
函數跳過換行符:
cin >> pcharchoice;
cin.ignore((numeric_limits<streamsize>::max(), '\n');
這個解決方案有一個很大的優勢,它不僅會跳過空白區域,直到它通過線路末端,它還會跳過用戶在同一條線路上給出的任何額外輸入。
第二個更復雜的方法是將整行讀入一個字符串,然后從行中獲取字符(通過使用字符串的索引0
,或者使用std::istringstream
和“normal”格式化的輸入操作符)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.