簡體   English   中英

C ++ - 方法退出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM