c ++ vector:在循环中用cin初始化

时间:2017-08-14 06:04:32

标签: c++ visual-studio-2013

我是编程的新手,我对某些项目有疑问 我将不胜感激任何帮助 首先我开始初始化矢量,但是我无法以 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);
        }

现在我有这个错误 “矢量下标超出范围” 显然休息在这里不能正常工作 我该怎么办?

3 个答案:

答案 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

这将给出文件信号的结束,你将能够打破循环