簡體   English   中英

必須輸入兩次值才能使用C ++

[英]Having to input value twice to work C++

#include <iostream>
#include <limits>
#include <math.h>

using namespace std;

int main()
{
    float startTemperature;
    float endTemperature;
    float loopTemperature;
    float stepSize;
    float i;
    float numberOne;
    cout << "Please enter a start temperature: " << endl;;
    cin >> startTemperature;
    while(!(cin >> startTemperature)){
        cin.clear();

        cout << "Invalid input.  Try again: ";
    }
    cout << "Please enter an end temperature: ";
    cin >> endTemperature;
    while(!(cin >> endTemperature)) {
        cin.clear();
        cin.ignore(256, '\n');
        cout << "Invalid temperature. Please try again: ";
    }
    cout << "Please enter a step size: ";
    cin >> stepSize;
    while(!(cin >> stepSize)) {
        cin.clear();
        cin.ignore(256, '\n');
    }
    for(i = startTemperature; i < endTemperature; i += stepSize) {
        if(i == startTemperature) {
            cout << "Celsius" << endl;
            cout << "-------" << endl;
            cout << startTemperature << endl;
            loopTemperature = startTemperature + stepSize;
        }
        loopTemperature += stepSize;
        if(loopTemperature > 20) {
            break;
        }
        cout << loopTemperature << endl;
    }
}

嗨,這段代碼的問題是我必須輸入兩次溫度值。 我看了其他答案,我認為這與cin緩沖區有關,但我不知道到底是什么問題。

在行中

cin >> startTemperature;  // <---problem here
while(!(cin >> startTemperature)){
    cin.clear();

    cout << "Invalid input.  Try again: ";
}

您將輸入一次,然后在循環中再次輸入。 這就是為什么您必須兩次輸入。

只需刪除第一行輸入,與endTemparaturestepSize相同。

您在while循環之前要求輸入,然后在循環條件語句中再次輸入。 將您的while語句中的條件更改為

    while(!cin){ 
    //error handling you already have
    cin>>startTemperature; //endTemperature respectively
    }

它不僅適用於溫度,而且適用於每個輸入。 將您的代碼更改為以下代碼:

  cout << "Please enter a start temperature: " << endl;;
  while (!(cin >> startTemperature)){
    cin.clear();
    cin.ignore(std::numeric_limits<int>::max(), '\n');
    cout << "Invalid input.  Try again: ";
  }
  cout << "Please enter an end temperature: ";
  while (!(cin >> endTemperature)) {
    cin.clear();
    cin.ignore(std::numeric_limits<int>::max(), '\n');
    cout << "Invalid temperature. Please try again: ";
  }
  cout << "Please enter a step size: ";
  while (!(cin >> stepSize)) {
    cin.clear();
    cin.ignore(std::numeric_limits<int>::max(), '\n');
    cout << "Invalid step size. Please try again: ";
  }

原因:

您有多余的cin電話。 還可以使用std::cin.ignore(std::numeric_limits<int>::max(), '\\n'); 而不是任意數字256。

暫無
暫無

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

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