【发布时间】:2014-02-26 14:01:00
【问题描述】:
我正在尝试用 C++ 编写一个简单的程序,它读取未指定数量的标记,然后一旦用户输入字符“q”,程序必须计算并显示平均标记。但是我遇到了一些麻烦。我采用的方法是将每个值保存为双精度值,我想将双精度值与字符 '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;
}
【问题讨论】:
-
确实不是我的首选解决方案,但您可以在阅读标记之前执行
if (std::cin.peek() == 'q')。 -
酷,谢谢。如果这不是您的首选解决方案,您会推荐什么?
-
@chris 我认为您应该将其发布为答案,这种情况是此方法存在的目的(istream::peek)。
-
先读取字符串,与q比较。如果不是q,则将字符串转换为double。 atof(aString.c_str())
-
@Cthulhu,它很快,但它错过了很多可能的捕获错误的机会。例如,前导空格(包括剩余的换行符)不会被丢弃,并且输入
quick将被视为 q。阅读字符串确实可能是确保你得到你想要的东西的最好方法。