比较C ++中的双打和字符

时间:2014-02-26 14:01:01

标签: c++ char double

我正在尝试用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;
}

4 个答案:

答案 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。