当我在课堂上运行这个程序时,每当我输入' |'时,我就会陷入无限循环。结束while循环的字符。我觉得我错过了一些明显的东西。
这个问题可以在Bjarne Stroustrup的C ++编程书的第126页找到,但作为一个快速的概述,我只是应该找到用户输入的最大和最小的数字。返回信息。输入' |'应该退出循环,以便我可以到达它提供有关所有输入数字的信息的部分,但每当我输入该字符(或任何不是数字的字符)时,它会创建一个无限循环
这是我的代码。
int main()
{
vector<double> nums;
while (true)
{
double current_num;
cout << "enter a double \n";
cin >> current_num;
if (current_num == '|')
break;
nums.push_back(current_num);
sort(nums.begin(), nums.end());
cout << nums[nums.size()-1] << " is the largest so far.\n";
cout << nums[0] << " is the smallest so far.\n";
}
cout << nums[nums.size()-1] << " is the largest number.\n";
cout << nums[0] << " is the smallest number.\n";
cout << "Number of values entered: " << nums.size() << '\n';
double sum = 0;
for (int k = 0; k<nums.size(); ++k)
sum += nums[0];
cout << "Sum of all values: " << sum << '\n';
for (int j=0; j<nums.size(); ++j)
cout << nums[j] << ' ';
return 0;
}
我在课堂上使用VS13并且我没有遇到这个问题,但是现在我用notepad ++编写代码并使用PuTTY在家编译(虽然我怀疑这与它有什么关系)。
答案 0 :(得分:6)
您正在将角色与double
进行比较:
if (current_num == '|')
这种比较永远不会做你想做的事。
首先阅读字符,将其与'|'
进行比较,然后根据需要进行双重转换。
注意:强>
对于您的记录,'|'
的ASCII值为124,因此如果您输入124,您的循环将结束...
答案 1 :(得分:2)
您正在将数字与角色进行比较。
if (current_num == '|')
current_num
包含您尝试与'|'
答案 2 :(得分:2)
因为您试图将非数字插入双精度数。 在你的情况下,你应该将输入读入字符串/ char并解析它。
答案 3 :(得分:2)
问题出在这里:
if(current_num == '|'){
}
而是读入std::string
并将其解析为双倍。
因此修改后的代码段看起来像这样:
while (true)
{
string strNum;
double current_num;
cout << "enter a double \n";
cin >> strNum;
if (strNum == "|")
break;
istringstream strm(strNum);
strm >> current_num;
nums.push_back(current_num);
sort(nums.begin(), nums.end());
cout << nums[nums.size()-1] << " is the largest so far.\n";
cout << nums[0] << " is the smallest so far.\n";
}