我是编程的新手,我对某些项目有疑问 我将不胜感激任何帮助 首先我开始初始化矢量,但是我无法以 Ctrl + Z
结束循环#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector <double> temps;
double temp;
cout << "Enter a sequence of tempreatures : " << "\n" ;
while (cin >> temp){
temps.push_back(temp);
}
double sum = 0;
for (int i = 0; i< temps.size(); ++i)
sum += temps[i];
cout << "Mean temprature : " << sum / temps.size() << "\n";
sort(temps.begin(), temps.end());
cout << "Median temprature : " << temps[temps.size() / 2];
然后我改变了这种格式:
cout << "ENter a sequence of tempreatures ending in 1500 : " << "\n" ;
while (cin >> temp){
if (temp == 1500)
break;
temps.push_back(temp);
}
现在我有这个错误 “矢量下标超出范围” 显然休息在这里不能正常工作 我该怎么办?
答案 0 :(得分:1)
Your issue is in the check condition of for loop.
for (int i = 0; i, temps.size(); ++i)
sum += temps[i];
It should be
for (int i = 0; i < temps.size(); ++i)
i, temps.size()
will evaluate and then ignore the part before ,
and are left with temps.size()
as check condition which will always be greater than 0
if you push_back
at least one element and your loop will never end.You might want to read how ,(comma)
works.
答案 1 :(得分:0)
如果您将std::getline
切换为字符串而不是std::cin
成双,则可以检查输入是否为空:
std::string input;
std::getline(std::cin, input);
while (!input.empty()){
temps.push_back(atof(input.c_str()));
std::getline(std::cin, input);
}
如果您还修复了Gaurav Sehgal提到的for
- 循环,它可以正常工作(输入所有数字然后按Enter键而不输入任何内容)。
答案 2 :(得分:0)
如果你在Windows上,那么你必须这样做
CTRL + Z
如果您使用的是Unix(Linux / Mac),那么您必须这样做
CTRL + D
这将给出文件信号的结束,你将能够打破循环