簡體   English   中英

如何使用用戶輸入停止程序的特定部分?

[英]How do I stop a certain part of a program using the user's input?

我正在編寫一個計分的程序。 我想知道如何根據用戶輸入停止程序的某個部分。 下面是我正在處理的程序。 如果用戶輸入“完成”,如何停止程序? 另外,我不一定必須使用“完成”來退出程序。 我最初打算使用-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');

只是返回0? 另外,除非您改寫了=運算符或其他內容,否則您不能進行grade ='done'。

要求用戶輸入整數值的最簡單方法,該值超出了您希望用戶輸入的 范圍 (例如-1)。 “完成時-輸入-1”。
同樣如果(grade = 'done') - 分配在這里,要比較use operator == ,這是

// if(grade =='done')

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

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');

首先,“ grade”是int類型,因此,如果您希望“ grade”是int,則不能將int轉換為* char,而可以使用-1退出。 或者,如果要退出“ done”,則等級可以是char [5],並且可以使用atoi()將字符串轉換為整數以進行檢查,並使用strcmp()來將“ grade”轉換為“ done”。

您已編寫代碼以輸入字符串。 然后,您可以測試字符串是否等於“ done”。 如果不是,則將字符串轉換為整數,然后可以對照成績邊界進行檢查。

如果您真的想使用數字和字符串,我建議使用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 

源鏈接

首先,單引號表示字符文字,雙引號表示以null終止的字符串(大約2.14)。

if(grade = 'done')始終為true,編譯器應該向您發出警告,告知您您沒有按照自己的意願進行操作,請對其進行分配,然后檢查它是否為true,它將始終是。

並且您正在嘗試為字符串分配一個整數。

這似乎是作業,所以我不會編寫它,但是您需要從stdin接收一個字符串,然后解析它,例如,它是整數還是字符串,作用於該數據。 要終止,您可以調用exitexit循環或從函數返回。

您可以將輸入作為字符串,如果第一個字符不是數字,則中斷循環,否則將字符串轉換為整數:

#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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM