C++ 使用cin.get()不会';I';我期待着。什么';怎么了?

C++ 使用cin.get()不会';I';我期待着。什么';怎么了?,c++,if-statement,switch-statement,cin,C++,If Statement,Switch Statement,Cin,所以我正在开发这个程序来执行一系列基本任务,其中一个任务是判断用户输入的字符是大写、小写还是非字母 #include <iostream> using namespace std; int main () { int mi; cout << "1) Area of Circle" << endl; cout << "2) Character Detection" << endl; cout <

所以我正在开发这个程序来执行一系列基本任务,其中一个任务是判断用户输入的字符是大写、小写还是非字母

#include <iostream>
using namespace std;

int main () {

    int mi;

    cout << "1) Area of Circle" << endl;
    cout << "2) Character Detection" << endl;
    cout << "3) Capitalization 1-3-5" << endl;
    cout << "4) Binomial Roots" << endl;
    cout << "0) Quit" << endl;

    cin >> mi;

    switch (mi) {
        case 2:
        {
            char c;
            cout << "input a character:  ";
            cin.get(c);
            cin.ignore(); /////// unsure if using this properly
            if ('a' <= c && c <= 'z') {cout << "c is lower case" << endl;}
            else if ('A' <= c && c <= 'Z') {cout << "C IS UPPER CASE" << endl;}
            else { cout << "C is not a letter" << endl;}
        }
            break;
    }


    return 0;
}
#包括
使用名称空间std;
int main(){
int-mi;

cout我建议您在每次初始化后使用
cin>
而不是
cin.get()
作为
cin.get()
,以“抓取”每次按enter键时放入流中的换行符

#include <iostream>
using namespace std;

int main () {

int mi;

cout << "1) Area of Circle" << endl;
cout << "2) Character Detection" << endl;
cout << "3) Capitalization 1-3-5" << endl;
cout << "4) Binomial Roots" << endl;
cout << "0) Quit" << endl;

cin >> mi;

switch (mi) {
    case 2:
    {
        char c;
        cout << "input a character:  ";
        cin>>c;
        cin.ignore(); /////// unsure if using this properly
        if ('a' <= c && c <= 'z') {cout << "c is lower case" << endl;}
        else if ('A' <= c && c <= 'Z') {cout << "C IS UPPER CASE" << endl;}
        else { cout << "C is not a letter" << endl;}
    }
        break;
}


return 0;
} 
#包括
使用名称空间std;
int main(){
int-mi;

cout我建议您在每次初始化后使用
cin>
而不是
cin.get()
作为
cin.get()
,以“抓取”每次按enter键时放入流中的换行符

#include <iostream>
using namespace std;

int main () {

int mi;

cout << "1) Area of Circle" << endl;
cout << "2) Character Detection" << endl;
cout << "3) Capitalization 1-3-5" << endl;
cout << "4) Binomial Roots" << endl;
cout << "0) Quit" << endl;

cin >> mi;

switch (mi) {
    case 2:
    {
        char c;
        cout << "input a character:  ";
        cin>>c;
        cin.ignore(); /////// unsure if using this properly
        if ('a' <= c && c <= 'z') {cout << "c is lower case" << endl;}
        else if ('A' <= c && c <= 'Z') {cout << "C IS UPPER CASE" << endl;}
        else { cout << "C is not a letter" << endl;}
    }
        break;
}


return 0;
} 
#包括
使用名称空间std;
int main(){
int-mi;


我可以建议使用
isupper()
islower()
?嗯,我实际上还没有学过这些,而且我实际上不允许在课堂上包括我们没有学过的东西(这是一个课堂作业)。你认为cin.get()有什么问题吗部分?或者可能是花括号?你可以在测试它们之前打印出
mi
c
的内容来解决这个问题。对于
c
你可能会想把它的值打印成一个整数。这会给你一些很好的提示,告诉你到底出了什么问题。我实际上测试了打印out c和它作为一个空白(抱歉,应该包括在内),这让我相信它是与cin.get(c)或cin.ignore()有关的问题。@zeurosis-这不是一个空白,但它是同样不可见的东西。如果你做了
int tmp=c;我能建议使用
isupper()
islower()
?嗯,实际上我还没有学过这些,而且我实际上不允许在课堂上包括我们没有学过的东西(这是一个课堂作业)。你认为cin.get()有什么问题吗部分?或者可能是花括号?你可以在测试它们之前打印出
mi
c
的内容来解决这个问题。对于
c
你可能会想把它的值打印成一个整数。这会给你一些很好的提示,告诉你到底出了什么问题。我实际上测试了打印out c和它作为一个空格出现(抱歉,应该包括这个),这让我相信这是cin.get(c)或cin.ignore()的问题。@zeurosis-这不是一个空格,但它同样是看不见的。如果你做了
int tmp=c;那就行了!谢谢!你知道cin.get()的原因吗在switch语句中的行为与在switch语句中的行为不同?switch与否没有任何区别。格式化的输入采用数字,留下换行符。get采用非大写或小写的换行符。在格式化的输入后加上ignore,它也应该起作用。@zeurosis-它没有起作用。switch语句与yo无关您的问题。您的问题是,在读取数字后,缓冲区中有一个换行符(回车键)等待读取。
cin.get
会抓取下一个字符,不管它是什么。
cin>>c;
将跳过包括换行符在内的“空白”字符(这就是您的问题所在)和空格。如果您在
If
语句之前打印出c的整数值,它会显示为
10
'\n'
(又称换行符)。@zeurosis-让我猜一下,在您输入
cin.ignore();
之前,它会立即显示为“c不是字母”在你输入任何东西之前,是吗?@zeurosis-是的,但该程序不要求你先输入数字,你只需要马上输入字母,对吗?在数字之后输入“回车”,对吗?回车是一个字符。当你不读数字时,你会马上得到你输入的字母。当你读数字时,输入字符仍然留下来阅读,所以这就是cin.get(c)
阅读,而不是它后面的字母。造成区别的不是“开关”,而是你放入
2A
的事实。你阅读
2
进入开关,然后阅读
,它不是字母。这起作用了!谢谢!你知道cin.get()的原因吗在switch语句中的行为与在switch语句中的行为不同?switch与否没有任何区别。格式化的输入采用数字,留下换行符。get采用非大写或小写的换行符。在格式化的输入后加上ignore,它也应该起作用。@zeurosis-它没有起作用。switch语句与yo无关您的问题。您的问题是,在读取数字后,缓冲区中有一个换行符(回车键)等待读取。
cin.get
会抓取下一个字符,不管它是什么。
cin>>c;
将跳过包括换行符在内的“空白”字符(这就是您的问题所在)和空格。如果您在
If
语句之前打印出c的整数值,它会显示为
10
'\n'
(又称换行符)。@zeurosis-让我猜一下,在您输入
cin.ignore();
之前,它会立即显示为“c不是字母”在你输入任何东西之前,是吗?@zeurosis-是的,但该程序不要求你先输入数字,你只需要马上输入字母,对吗?在数字之后输入“回车”,对吗?回车是一个字符。当你不读数字时,你会马上得到你输入的字母。当你读数字时,输入字符仍然留下来阅读,所以这是cin.get(c)
阅读的内容,而不是它后面的字母