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

入力を文字列として受け取ることができます。最初の文字が数字でない場合はループを中断し、そうでない場合は文字列を整数に変換します。

#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 に答える
0

ユーザーに整数値を入力するように求める最も簡単な方法です。これは、ユーザーが入力すると予想される値の範囲外です(例: -1)。「完了したら-1を入力してください」。
また、(grade = 'done')-割り当てがここにある場合、比較するにはoperator==を使用します。

// if(成績 == '完了')

または、次のアプローチを使用できます。

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 で終了できます。または、「完了」で終了したい場合は、グレードを char[5] にすることができ、atoi() を使用して文字列を整数に変換してチェックし、strcmp() を使用して「グレード」と「完了」を比較できます。

于 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 に答える