初学者问题 - 退出while循环,输入类型double作为条件,C ++

时间:2010-01-24 10:58:22

标签: c++ loops while-loop

我刚刚开始学习C ++,并且当while循环的条件是来自用户的double类型的输入时,我遇到了while循环的一个小问题。据我所知,如果用户没有输入与double类型兼容的值,则循环会自动中断。问题是我的控制台应用程序在输入除double之外的任何内容时退出。

我正在进行的当前练习要求使用while循环和if语句来计算输入的测量数量并输出总数。用户输入一个值,然后输入测量系统(即25米,25米)。它还必须记录并输出输入的最高和最低值。

double value = 0;
double total = 0;
double high = 0;
double low = 0;
string unit = " ";

while (cin >> value >> unit && unit != "convert")
{
if (unit == "in") {total = total+(value*2.54);// in = inches converting to cm
        if (value*2.54 > high) high = value;
        if (value*2.54 < low) low = value;
        }

else if (unit == "m"){total = total+(value*100);// m = metres, converting to cm
        if (value*100 > high) high = value;
        if (value*100 < low) low = value;
        }

else if (unit == "ft"){total = total+(value*30.48);// ft = feet, converting to ft 
        if (value*30.48 > high) high = value;
        if (value*30.48 < low) low = value;
        }
else if (unit == "cm"){total = total+value;// cm = centremetres 
        if (value*2.54 > high) high = value;
        if (value*2.54 < low) low = value;
        }

else cout << "Unable to calculate unit type - " << unit << endl;

value = 0;
}

cout << "Total length in centre-metres: " << total << endl
     << "Total length in metres: " << total/100 << endl
     << "Total length in feet: " << total/30.48 << endl
     << "Total length in inches: " << total/2.54 << endl
     << "\nHighest value: " << high << ", Lowest value: " << low << endl;


keep_window_open();
return 0; 

keep_window_open()是我的C ++书籍附带的自定义头文件的一部分,它只是要求用户输入要退出的字符。

我知道程序的当前状态有点臃肿但我想先让它完全正常工作。我不得不使用一个解决方法,如果用户输入'convert'作为一个单元,循环被杀死,所以我实际上可以看到它是否正常工作。当除了double之外的任何东西输入值时,程序会完成/完成其任务,但结果会在控制台窗口中闪烁,然后立即退出。

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

当你说:

时,你的问题就出现了
cin >> value

并输入除double之外的任何内容,流变坏,因为值预期为double。你的keep_window_open()函数也会失败,因为流仍然不好。

这有两种方式:

  • 从现有命令行提示符窗口运行程序 - 程序结束后将保持打开状态。这是最好的通用解决方案。

  • 在使用“暂停”代码之前清除流。不幸的是,您键入的结束行仍将在缓冲区中。将您的“暂停”代码替换为:

_

string line;
if ( ! cin ) {
    cin.clear();
    getline( cin, line );
}
getline( cin, line );

答案 1 :(得分:0)

你的程序存在,因为它是它的工作方式。 你可以在最后添加一个等待char命中的调用...然后你会看到你的响应,当你点击一个char时它会退出。

std::cin.get();

答案 2 :(得分:0)

要退出循环,您可以使用break指令。

要在终止前查看结果,您可以使用getchar()功能。