Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初学者问题-退出while循环,输入类型double as condition,C++; P>我刚刚开始学习C++,当while循环的条件是输入,类型为双,从用户时,while循环有一个小问题。我知道,如果用户没有输入与double类型兼容的值,那么循环将自动中断。问题是我的控制台应用程序在输入双精度以外的任何内容时退出_C++_Loops_While Loop - Fatal编程技术网

初学者问题-退出while循环,输入类型double as condition,C++; P>我刚刚开始学习C++,当while循环的条件是输入,类型为双,从用户时,while循环有一个小问题。我知道,如果用户没有输入与double类型兼容的值,那么循环将自动中断。问题是我的控制台应用程序在输入双精度以外的任何内容时退出

初学者问题-退出while循环,输入类型double as condition,C++; P>我刚刚开始学习C++,当while循环的条件是输入,类型为双,从用户时,while循环有一个小问题。我知道,如果用户没有输入与double类型兼容的值,那么循环将自动中断。问题是我的控制台应用程序在输入双精度以外的任何内容时退出,c++,loops,while-loop,C++,Loops,While Loop,我正在进行的当前练习要求使用while循环和if语句来计算输入的测量值并输出总数。用户输入一个值,然后输入测量系统(即25米代表25米)。它还必须记录并输出输入的最高和最低值 double value = 0; double total = 0; double high = 0; double low = 0; string unit = " "; while (cin >> value >> unit && unit != "convert") { i

我正在进行的当前练习要求使用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; 
双值=0;
双倍合计=0;
双高=0;
双低=0;
字符串单位=”;
而(cin>>值>>单位和单位!=“转换”)
{
如果(单位=“英寸”){total=total+(值*2.54);//英寸=英寸转换为厘米
如果(值*2.54>高)高=值;
如果(值*2.54<低)低=值;
}
如果(单位=m){total=total+(值*100);//m=m,转换为cm
如果(值*100>高)高=值;
如果(值*100<低)低=值;
}
如果(单位=“英尺”){total=total+(值*30.48);//英尺=英尺,转换为英尺
如果(值*30.48>高)高=值;
如果(值*30.48<低)低=值;
}
else如果(unit==“cm”){total=total+value;//cm=centremetres
如果(值*2.54>高)高=值;
如果(值*2.54<低)低=值;
}

否则你的问题是当你说:

cin >> value
如果输入除double以外的任何内容,则流将变坏,因为值应为double。keep_window_open()函数也会失败,因为流仍然变坏

有两种方法:

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

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

_


你的程序之所以存在,是因为它是按设想的方式工作的。 您可以在最后添加一个等待字符命中的调用…然后您将看到您的响应,当您命中字符时,它将退出

std::cin.get();

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

要在终止之前查看结果,可以使用
getchar()
函数

std::cin.get();