switch语句不显示除默认语句以外的任何类型的输出

时间:2019-01-03 18:25:08

标签: c++ switch-statement

我正在写一个switch语句示例,一切都很好,没有错误给出,并且可以正常运行,但是没有按照我想要的去做。它根本没有显示输出,请提出任何建议?

我不知道要尝试什么,因为没有错误,那是行不通的

 #include <iostream>
 using namespace std;
 main ()
 {
    int student,average,grade,sum;
    char A,a,B,b,C,c,D,d,F,f;
    student = 1;
    average,sum = 0;
    cout << "Please enter the grades of student:";
    cin >> grade;
    switch (grade)
     {
    case 'A' :
    case 'a' :
        cout << "excellent";
        break;
    case 'B' :
    case 'b' :
        cout << "very good";
        break;
    case 'C' :
    case 'c' :
        cout << "good";
        break;
    case 'D' :
    case 'd' :
        cout << "Poor";
        break;
    case 'F' :
    case 'f' :
        cout << "Fail";
        break;
        default:
        cout << "Please enter the grade from A to D & F";
     }
  }

我希望它告诉我学生的成绩,但它什么也没显示,无论您输入什么,它总是显示默认信息

3 个答案:

答案 0 :(得分:3)

您需要将grade设为char,而不是int

cin >> grade;试图从输入流中读取一个整数,因为gradeint。如果将grade设为char,则cin >> grade只会读取一个字符。 (在两种情况下,它都首先跳过空格,因此您无法读取单个空格字符。但这在这里无关紧要。)

可能值得补充的是,当您尝试读取数字并且没有数字要读取(因为用户键入字母等级)时,输入流将进入错误状态。在使用std::cin.clear()重设错误之前,任何输入尝试都将失败,并且不会读取任何内容。请参阅std::istream::clear,尤其是提供的示例代码。

答案 1 :(得分:0)

好的,所以我昨天问了这个问题,谢谢大家的帮助,我使用getchar来回答问题,但老实说,我不知道getchar的目的是什么,因为我还没有学到它,所以我一直尝试我终于解决了这个问题,我之所以发布此消息,是因为你们分享了您的知识并帮助了我,所以我想分享我学到的知识来增加您的知识 代码在这里

#include <iostream>
using namespace std;
main ()
{
    char grade;
    cout << "Please enter the grades of student:";
    cin >> grade;
    switch (grade)
    {
        case 'A' :
        case 'a' :
            cout << "excellent";
            break;
        case 'B' :
        case 'b' :
            cout << "very good";
            break;
        case 'C' :
        case 'c' :
            cout << "good";
            break;
        case 'D' :
        case 'd' :
            cout << "Poor";
            break;
        case 'F' :
        case 'f' :
            cout << "Fail";
            break;
            default:
            cout << "Please enter the grade from A to D & F";
    }
}

答案 2 :(得分:-1)

这应该有效。 我用getchar()代替了cin,因为getchar只会得到一个字符(char =单个字符,字符串多个字符)。如果您使用cin并且用户输入的字符超过一个,那么cin将仅使用第一个字符。

另一点是您对char a-f,A-B的声明。这没用。 A,B,C,D,E,F只是名称,您必须将其与值进行比较。在您自己的开关中,您没有使用所有这些字符,而是将它们与不带变量的字符进行比较。 case 'A':检查是否成绩=='A'如果成绩== a则不。

另一点是:average,sum=0。我现在真的不想要做什么,但是如果您尝试将它们的展位设置为0,那是错误的方法。然后,您应该在声明中加入int student, average=0,sum=0;之类的内容。 您声明了3个整数,给它们提供一个值,但从未使用过它们,也许以后吗? 我将main()更改为int main()(returntype = integer) 有关主体的更多信息:Git URLs

我在主目录中添加了return 0;,导致一个函数应该返回!

我还为您的输出添加了换行符,以使其更好地从控制台读取。

我评论说出了我认为它们无用或错误的地方。如果您有任何疑问或我做错了,请告诉我。

#include <iostream>
using namespace std;
int main ()
 {
    int student, average=0,sum=0; //dont know for what these integers are. All getting set but never been used.
     //char A,a='a',B,b,C,c,D,d,F,f; //Completly Useless and not used
    char grade;
    student = 1;
 // average,sum = 0;      What is the expected result of this?!

  cout << "Please enter the grades of student:\n";
  //cin >> grade; replaced with getchar();
    grade=getchar(); //get single char from console

    switch (grade)
     {
    case 'A' :
    case 'a' :
        cout << "excellent\n";
        break;
    case 'B' :
    case 'b' :
        cout << "very good\n";
        break;
    case 'C' :
    case 'c' :
        cout << "good\n";
        break;
    case 'D' :
    case 'd' :
        cout << "Poor\n";
        break;
    case 'F' :
    case 'f' :
        cout << "Fail\n";;
        break;
        default:
        cout << "Please enter the grade from A to D & F\n";
        break;
     }
    return 0;
  }