2

我正在制作一个计算成绩的程序。我想知道如何根据用户的输入停止程序的某个部分。下面是我正在开发的程序。如果用户输入“完成”,我如何停止程序?另外,我不一定要使用“完成”来退出程序。我最初打算使用 -1,但我遇到了一个问题,我必须制作一个健壮的程序,其中不接受 < 0 和 > 100 的值。

   int grade;
   a=b=c=d=f=0;


   do
   {
      cout << "Enter a grade or enter done to stop. ";


      if (grade >= 90 && grade <= 100)
          {a++;}
      if (grade >= 80 && grade < 90)
          {b++;}
      if (grade >= 70 && grade < 80)
          {c++;}
      if (grade >= 60 && grade < 70)
          {d++;}
      if (grade >= 0 && grade < 60)
          {f++;}



   } while (grade != 'done');
4

7 回答 7

1

只做一个返回0?此外,除非您覆盖 = 运算符或其他内容,否则您不能执行 Grade = 'done'。

于 2012-11-02T07:45:24.933 回答
0

要求用户输入整数值的最简单方法,它超出了您希望他输入的值范围(例如 -1)。“完成后 - 输入 -1”。
此外,如果(grade = 'done')-分配在这里,比较使用operator==,即

// 如果(等级 == '完成')

或者您可以使用以下方法:

do
   {
      cout << "Enter a grade or enter done to stop. ";
      // first try to get string from user (which he/she enters when done)
      string str;
      cin >> str;
      if (str == "done") // if done was entered - exit from the loop
         break;
      // else clear fail bit in stream object and read int value
      cin.clear();
      cin >> grade;

      if (grade >= 90 && grade <= 100)
          {//a++;}
      if (grade >= 80 && grade < 90)
          {//b++;}
      if (grade >= 70 && grade < 80)
          {//c++;}
      if (grade >= 60 && grade < 70)
          {//d++;}
      if (grade >= 0 && grade < 60)
          {//f++;}

   } while (grade != 'done');
于 2012-11-02T07:53:03.850 回答
0

首先,"grade" 是 int 类型,所以你不能将 int 转换为 *char,如果你希望 "grade" 是 int,那么你可以使用 -1 退出。或者如果你想用“done”退出,grade 可以是 char[5],你可以使用 atoi() 将字符串转换为整数进行检查,并使用 strcmp() 将“grade”与“done”进行比较。

于 2012-11-02T07:57:12.567 回答
0

您已经编写代码来输入字符串。然后,您可以测试字符串是否等于“完成”。如果不是,则将字符串转换为整数,然后您可以检查您的成绩界限。

于 2012-11-02T07:57:27.623 回答
0

如果你真的想使用数字和字符串,我建议使用 stringstreams。这是一个例子:

string Text = "456";//string containing the number
int Result;//number which will contain the result

stringstream convert(Text); // stringstream used for the conversion initialized with the  contents of Text

if ( !(convert >> Result) )//give the value to Result using the characters in the string
    Result = 0;//if that fails set Result to 0
//Result now equal to 456 

来源链接

于 2012-11-02T08:00:11.477 回答
0

首先,单引号表示字符文字,双引号表示以空字符结尾的字符串(2.14 左右)。

if(grade = 'done')将永远是真的,编译器应该向你发出警告,告诉你你没有做你认为你正在做的事情,你正在分配它然后检查它是否是真的,它永远都是。

而且您正在尝试将整数分配给字符串。

这似乎是家庭作业,所以我不会写它,但你需要从标准输入中获取一个字符串,然后解析它,例如它是一个整数还是字符串,对该数据的行为。要终止,您可以调用exit、中断循环或从函数返回。

于 2012-11-02T08:05:14.657 回答
0

您可以将输入作为字符串,如果第一个字符不是数字则打破循环,否则将字符串转换为整数:

#include<iostream>
#include<string>
#include<cctype>
#include<cstdlib>


using namespace std;

int main() {
    int grade;
    string input;
    int a, b, c, d, f;
    a=b=c=d=f=0;


    do
    {
        cout << "Enter a grade or enter done to stop: ";
        cin >> input;
        cout << endl;
        if(!isdigit(input[0])) {
            break;
        } else {
            grade = atoi(input.c_str());
        }

        if (grade >= 90 && grade <= 100)
          {a++;}
        if (grade >= 80 && grade < 90)
          {b++;}
        if (grade >= 70 && grade < 80)
          {c++;}
        if (grade >= 60 && grade < 70)
          {d++;}
        if (grade >= 0 && grade < 60)
          {f++;}


    } while (1==1);

    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
    cout << "d = " << d << endl;
    cout << "f = " << f << endl;

    getchar();
    return 0;
}
于 2012-11-16T11:35:27.997 回答