运行代码后,cin
函数中的FtoC()
将被忽略,而ctemp
的值默认为0
。我已经使用其他代码(不同的循环)使代码运行,但我真的想了解这个错误的机制,并采用这种方式来实现它。
#include <cstdlib>
#include <iostream>
using namespace std;
void threeint();
void FtoC();
int main()
{
threeint();
FtoC();
return 0;
}
void FtoC()
{
double ctemp = 0, ftemp = 0;
cout << "Please enter the temperature in Celsius which you would like to be\
converted to Fharenheit." << endl;
cin >> ctemp;
ftemp = ((ctemp * (9 / 5)) + 35);
cout << ctemp << " degrees celsius is " << ftemp << " in fahrenheit" << endl;
}
void threeint()
{
int x = 0, bigint = 0, smlint = INT_MAX, avgint = 0, index = 0;
cout << "Input as many integers as you like and finalise by entering any
non-integer input" << endl;
while (cin >> x)
{
if (x > bigint)
bigint = x;
if (x < smlint)
smlint = x;
++index;
avgint += x;
}
cout << "The largest integer is " << bigint << ".\t" << "The smallest
integer is " << smlint << ".\t";
cout << "The average of all input is " << (avgint / index) << endl;
}
答案 0 :(得分:0)
“错误阅读”后,cin
处于错误输入状态。在重新尝试读取之前,您应该跳过错误输入并清除其标志
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Skip bad input
答案 1 :(得分:0)
我将首先回答你的问题。你的cin不等待输入的原因是因为cin没有被重置以在输入错误之后接受新值(比如为输入输入一个字母)。要解决此问题,您必须清除输入并忽略输入的任何错误输入。这可以通过在程序中添加以下行来完成:
cin.clear(); // clears cin error flags
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignores any invalid input entered
ios :: clear为流的内部错误状态标志设置了一个新值。标志的当前值被覆盖:所有位都被状态中的位替换;如果state是goodbit(为零),则清除所有错误标志。
这是直接引自CPlusPlus.com; for cin.clear()。
cin.ignore()从输入序列中提取字符并丢弃它们,直到提取了n个字符,或者一个比较等于delim。如果到达文件结尾,该函数也会停止提取字符。如果过早地达到此目的(在提取n个字符或查找delim之前),该函数将设置eofbit标志。
这是直接引自CPlusPlus.com; for cin.ignore()。
这2个引号提供了2个函数如何工作的深入分析以及提供的链接。
您的计划中需要指出的其他一些事项是:
首先,当您执行9/5时,您打算将该值设为1.8。但是,由于您要划分两个整数值,编译器会将最终结果保留为na int;因此,代码中9/5 = 1。为了克服这个问题,你的除法运算的除数或除数必须是float类型。最简单和最简单的方法是执行9.0 / 5或9 / 5.0。这样,编译器就知道您希望将最终结果作为浮点值。您也可以使用强制转换,但是,添加小数点更简单,更简单。
其次,我不确定这个错误是否仅存在于您在此处发布的代码中,因为您说您的编译完美,但您的cout语句中的某些字符串文字不是由撇号正确封闭,至少在您在此处发布的代码中。例如,您的代码就是这条线:
cout << "The largest integer is " << bigint << ".\t" << "The smallest
integer is " << smlint << ".\t";
上帝好运!