您好我正在查看我的基本编程,在此代码中我试图获得3
等级的平均值,但它不接受字符作为输入并跳转到程序的结尾输入Y
或y
后。任何帮助将不胜感激:))
#include <iostream>
using namespace std;
int g1,g2,g3;
int AVG = (g1+g2+g3)/3;
int main ()
{
cout << " Hi! Do you want to calculate the average? (Y/N)?";
char a;
cin >> a;
if ((a == 'Y' && a == 'y'))
{
cout << "Enter three grades \n";
cin >> g1 >> g2 >> g3;
cout << "Your average grade is : " << AVG;
}
else
{
cout << "THANK YOU!";
}
return 0;
}
答案 0 :(得分:3)
首先,在||
条件中使用&&
代替if
。喜欢:
if ((a == 'Y' || a == 'y'))
此外,在获得用户输入后进行平均操作。喜欢:
if ((a == 'Y' || a == 'y'))
{
cout << "Enter three grades \n";
cin >> g1 >> g2 >> g3;
AVG = (g1+g2+g3)/3; // <========= here
cout << "Your average grade is : " << AVG;
}
在C和C ++中,在分割两个整数时切断十进制扩展。自5 / 2 = 2.5
起,它会切断.5
并仅打印2
。
[C ++ 11:5.6 / 4]:二进制
/
运算符产生商,而 binary%
运算符从第一个除法中产生余数 表达由第二个。如果/
或%
的第二个操作数为零 行为未定义。 对于整数操作数,/
运算符产生 代数商与任何小数部分丢弃; 如果商 a / b可以在结果类型中表示,(a/b)*b + a%b
是相等的 到了。
答案 1 :(得分:1)
下面:
if ((a == 'Y' && a == 'y'))
您需要使用||
运算符,而不是&&
。
答案 2 :(得分:1)
对于初学者,变量AVG
声明为
int AVG = (g1+g2+g3)/3;
全局范围中的始终等于0,因为它在程序中没有更改。
无需在全局范围内声明这些变量AVG,g1,g2,g3。每个变量都应在使用它的位置声明。
对象也不能同时与两个不同的值相等。所以这个条件
if ((a == 'Y' && a == 'y'))
错了。你的意思是(我已经沉迷于删除多余的括号)
if (a == 'Y' || a == 'y')
考虑到所有这些因素,程序可以通过以下方式查找
#include <iostream>
int main()
{
while ( true )
{
std::cout << "Hi! Do you want to calculate the average (Y/N)? ";
char c;
if ( not ( std::cin >> c ) or not ( c == 'Y' || c == 'y' ) )
{
std::cout << "THANK YOU!" << std::endl;
break;
}
std::cout << "\nEnter three grades: ";
int x, y, z;
std::cin >> x >> y >> z;
std::cout << "Your average grade is : " << ( x + y + z ) / 3 << "\n\n";
}
return 0;
}
它的输出可能看起来像
Hi! Do you want to calculate the average (Y/N)? y
Enter three grades: 1 5 6
Your average grade is : 4
Hi! Do you want to calculate the average (Y/N)? n
THANK YOU!