#include <iostream>
using namespace std;
int main(){
int grade;
cout << ("Enter a grade input : ");
cin >> grade;
if (grade >= 94 && grade <= 100){
cout << "Your output grade is: 1.00";
}
if (grade >= 88.50 && grade <= 93.39){
cout << "Your output grade is: 1.25";
}
if (grade >= 83 && grade <= 88.49){
cout << "Your output grade is: 1.50";
}
if (grade >= 77.5 && grade <= 82.99){
cout << "Your output grade is: 1.75";
}
if (grade >= 72 && grade <= 77.49){
cout << "Your output grade is: 2.00";
}
if (grade >= 65.5 && grade <= 71.99){
cout << "Your output grade is: 2.25";
}
if (grade >= 61 && grade <= 65.49){
cout << "Your output grade is: 2.50";
}
if (grade >= 55.5 && grade <= 60.99){
cout << "Your output grade is: 2.75";
}
if (grade >= 50 && grade <= 55.49){
cout << "Your output grade is: 3.00";
}
else if (grade > 100 && grade < 0)
cout << (" ! Wrong data ");
}
那是我的代碼,它是一個使用if()條件的選擇控制結構。我的問題是我想輸入100到55.49的成績,輸出顯示100到55.49的成績,第二個輸出顯示真實成績,相當于94成績是1.00。如果我輸入小于 0 且大于 100,它會顯示輸出“錯誤資料”。
uj5u.com熱心網友回復:
首先,您正在使用int無法處理浮點值的讀取輸入。例如,如果您輸入55.49,您將只收到55,留.49在輸入緩沖區中等待讀取。您需要使用float或double代替int.
修復之后,還有一些其他問題。
if (grade > 100 && grade < 0)將始終為假,因為數字不能既“大于 100”又“小于 0”。您需要||(邏輯或)運算子,而不是&&(邏輯與)運算子。
此外,您的邏輯存在差距,其中成績93.4-93.99和< 50被忽略。事實上,你的ifs 可以簡化很多。
試試這個:
#include <iostream>
using namespace std;
int main(){
double grade;
cout << "Enter a grade input : ";
if (!(cin >> grade)){
cout << " ! Bad data ";
}
else if (grade > 100 || grade < 0){
cout << " ! Wrong data ";
}
else if (grade >= 94){
cout << "Your output grade is: 1.00";
}
else if (grade >= 88.5){
cout << "Your output grade is: 1.25";
}
else if (grade >= 83){
cout << "Your output grade is: 1.50";
}
else if (grade >= 77.5){
cout << "Your output grade is: 1.75";
}
else if (grade >= 72){
cout << "Your output grade is: 2.00";
}
else if (grade >= 65.5){
cout << "Your output grade is: 2.25";
}
else if (grade >= 61){
cout << "Your output grade is: 2.50";
}
else if (grade >= 55.5){
cout << "Your output grade is: 2.75";
}
else if (grade >= 50){
cout << "Your output grade is: 3.00";
}
else{
cout << ...; // <-- add something here!
}
}
uj5u.com熱心網友回復:
一個簡單而簡短的解決方案可以是這樣的:
#include <iostream>
int main( )
{
double grade;
std::cout << "Enter a grade input: ";
std::cin >> grade;
if ( grade > 100 || grade < 50 )
{
std::cout << "Wrong data!\n";
}
else
{
std::cout << "Your output grade is: ";
}
if ( grade >= 94 && grade <= 100 )
{
std::cout << "1.00";
}
else if ( grade >= 88.50 && grade <= 93.39 )
{
std::cout << "1.25";
}
else if ( grade >= 83 && grade <= 88.49 )
{
std::cout << "1.50";
}
else if ( grade >= 77.5 && grade <= 82.99 )
{
std::cout << "1.75";
}
else if ( grade >=72 && grade <= 77.49 )
{
std::cout << "2.00";
}
else if ( grade >= 65.5 && grade <= 71.99 )
{
std::cout << "2.25";
}
else if ( grade >= 61 && grade <= 65.49 )
{
std::cout << "2.50";
}
else if ( grade >= 55.5 && grade <= 60.99 )
{
std::cout << "2.75";
}
else if ( grade >= 50 && grade <= 55.49 )
{
std::cout << "3.00";
}
return 0;
}
uj5u.com熱心網友回復:
不是對您問題的直接回答,但是有很多 if 是脆弱的代碼(難以維護,很容易出現小錯誤,并且很難找到等等......等)學會尋找重復代碼中的模式并嘗試用函式替換它們。此代碼中的 for 回圈基于范圍:https : //en.cppreference.com/w/cpp/language/range-for。const 表示程式不能改變變數的值。
#include <iostream>
#include <array>
// put all the values at which your function output changes into an array of doubles
std::array<double, 8> threshold_values{ 94.0, 88.5, 83.0, 77.5, 72.0, 65.5, 61.0, 55.5 };
// looking at your code, grade starts at 1.0 and increases by 0.25 at each
// threshold value
const double base_grade = 1.0;
const double grade_step = 0.25;
// so now we need to make a function that uses the real information
// from data above to calculate a grade.
// version of get_grade that will explain itself while it runs.
double get_grade_verbose(const double input)
{
double grade = base_grade;
for (const auto& threshold : threshold_values)
{
if (input > threshold)
{
std::cout << "input : " << input << " is greater then " << threshold << ", grade will be : " << grade << "\n";
return grade;
}
std::cout << "input : " << input << " was smaller then " << threshold << " so increasing grage to ";
grade = grade_step;
std::cout << grade << "\n";
}
return grade;
}
// version without output
double get_grade(const double input)
{
double grade = base_grade;
for (const auto& threshold : threshold_values)
{
if (input > threshold) return grade; // done
grade = grade_step;
}
return grade;
}
int main()
{
double input = 84.0;
if ((input >= 0.0 ) && (input <= 100.0))
{
std::cout << "grade = " << get_grade(input) << "\n";
}
else
{
std::cout << "invalid input\n";
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372511.html
標籤:C
