繁体   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