我正在尝试用C ++编写一个简单的程序,读取一个未指定数量的标记,然后一旦用户输入字符'q',程序必须计算并显示平均标记。但是我遇到了一些麻烦。我采取的方法是将每个值保存为double,我想将double与字符'q'进行比较,如果它们是相同的字符,则结束循环,计算并显示平均值。
但是我认为标记的char
值'q'和double
值之间的比较似乎是无法比拟的。当我使用标记的整数值做同样的事情时这对我有用,但看起来不是双倍。任何帮助,将不胜感激。
以下是代码:
int main()
{
cout << "Please enter any number of marks. Enter 'q' to stop." << endl;
double total = 0;
int counter = 0;
bool repeat = true;
do
{
double mark;
cin >> mark;
if (mark != 'q')
{
total += mark;
counter++;
}
else
{
repeat = false;
}
}
while (repeat == true);
double average = total/counter;
cout << "Average: " << average << endl;
return 0;
}
答案 0 :(得分:2)
你需要将mark变量更改为string,然后将其与'q'进行比较,否则尝试解析为数字。
否则这整个代码没有多大意义,因为ASCII中的'q'是113,我猜这是一个可能的值
答案 1 :(得分:2)
Typecast double to int然后比较,它必须工作,因为它比较了字符的ASCII值
以下是代码:
int main()
{
cout << "Please enter any number of marks. Enter 'q' to stop." << endl;
double total = 0;
int counter = 0;
bool repeat = true;
do
{
double mark;
cin >> mark;
if ((int)mark != 'q')
{
total += mark;
counter++;
}
else
{
repeat = false;
}
}
while (repeat == true);
double average = total/counter;
cout << "Average: " << average << endl;
return 0;
}
答案 2 :(得分:1)
你不能把一个双精神赋予char。您可能需要使用其他c ++库函数将字符串(char *)转换为double。有不同的方法来做到这一点。 试试这个:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
cout << "Please enter any number of marks. Enter 'q' to stop." << endl;
double total = 0;
int counter = 0;
bool repeat = true;
do
{
char userinput[8];
cin >> userinput;
std::stringstream ss;
double mark;
if (userinput[0] != 'q')
{
ss << userinput;
ss >> mark;
total += mark;
counter++;
}
else
{
repeat = false;
}
}
while (repeat == true);
double average = total/counter;
cout << "total : " << total << " count : " << counter << endl;
cout << "Average: " << average << endl;
return 0;
}
答案 3 :(得分:0)
你做错了。如果您尝试将cin
char
转换为double
变量,则输入char
将保留在输入缓冲区中,double
变量保持不变。所以这将以无限循环结束。
如果您真的希望用户输入char
来结束输入,则需要将整个输入作为字符串变量。检查q
的字符串。如果不存在,请使用atof()将其转换为double。