C++ 如何使用CIN在一行中捕获两种不同的数据类型?

C++ 如何使用CIN在一行中捕获两种不同的数据类型?,c++,stdvector,cin,C++,Stdvector,Cin,这是一个家庭作业:基本上,我需要使用cin行捕捉一行,比如: mary_smith 10 9 10 3 100 8 7.5 10 73 9 10 5 9 87-1 。。。然后将名称放入字符串向量中,将数字(等级)放入具有相同索引的多维向量中 到目前为止,我有: #include <iostream> #include <stdlib.h> #include <iomanip> #include <vector> #include <stri

这是一个家庭作业:基本上,我需要使用
cin
行捕捉一行,比如:
mary_smith 10 9 10 3 100 8 7.5 10 73 9 10 5 9 87-1

。。。然后将名称放入字符串向量中,将数字(等级)放入具有相同索引的多维向量中

到目前为止,我有:

#include <iostream>
#include <stdlib.h>
#include <iomanip>
#include <vector> 
#include <string>
using namespace std;

vector<string> names;
vector< vector<float> > grades; //Multidimensional vector for grades
string tempName;
float tempGrade;
int student = 0;

int main(){
    do {
        cin >> tempName; //Get the first entry before whitespace
        names.push_back(tempName); //Push the name into the vector

        //For all the other inputs, put the respective grades at the same base index?
        for (int i = 0; tempGrade > 0; ++i) {
            cin >> tempGrade; //Get all grades until -1
            grades[student][i].push_back(tempGrade);//Add grade to the index.
        }
        ++student;
    } while (tempName != "KEY"); //If you see KEY, kill the program.
    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
载体名称;
向量<向量>等级//等级的多维向量
字符串tempName;
浮置温度梯度;
int student=0;
int main(){
做{
cin>>tempName;//获取空白前的第一个条目
name.push_back(tempName);//将名称推入向量
//对于所有其他输入,将相应的等级置于相同的基本指数?
对于(int i=0;tempGrade>0;++i){
cin>>tempGrade;//获取所有等级,直到-1
成绩[student][i]。向后推(tempGrade);//将成绩添加到索引中。
}
++学生;
}while(tempName!=“KEY”);//如果看到KEY,请终止程序。
返回0;
}
不幸的是,问题在于机器将所有条目视为
字符串。为什么它不在我的
for
循环中开始迭代

更新

之前我说过它需要在多维数组中,但我指的是向量。我在上面更新了这个。

您的
tempGrade
变量以0开头您的
tempGrade
变量以0开头您的
tempGrade

变量以0开头您的
tempGrade
变量以0开头您的循环条件是
tempGrade>0
;但此时
tempGrade
仍然为零,因此不会进入循环。读取值后,在环体内检查值;或者可能将循环重新构造为
do{}while(tempGrade>0)

同样,您可能希望检查magic
tempName
值,并在尝试读取该值的分数之前退出循环


然后你会发现
grades[student]
是无效的,因为你从不从初始的空状态调整
grades
。大概你已经修正了[student][i]的
成绩在实际代码中,因为它不会编译。

循环条件是
tempGrade>0
;但此时
tempGrade
仍然为零,因此不会进入循环。读取值后,在环体内检查值;或者可能将循环重新构造为
do{}while(tempGrade>0)

同样,您可能希望检查magic
tempName
值,并在尝试读取该值的分数之前退出循环


然后你会发现
grades[student]
是无效的,因为你从不从初始的空状态调整
grades
。大概你已经修正了[student][i]的
成绩在实际代码中,因为它不会编译。

循环条件是
tempGrade>0
;但此时
tempGrade
仍然为零,因此不会进入循环。读取值后,在环体内检查值;或者可能将循环重新构造为
do{}while(tempGrade>0)

同样,您可能希望检查magic
tempName
值,并在尝试读取该值的分数之前退出循环


然后你会发现
grades[student]
是无效的,因为你从不从初始的空状态调整
grades
。大概你已经修正了[student][i]的
成绩在实际代码中,因为它不会编译。

循环条件是
tempGrade>0
;但此时
tempGrade
仍然为零,因此不会进入循环。读取值后,在环体内检查值;或者可能将循环重新构造为
do{}while(tempGrade>0)

同样,您可能希望检查magic
tempName
值,并在尝试读取该值的分数之前退出循环


然后你会发现
grades[student]
是无效的,因为你从不从初始的空状态调整
grades
。大概你已经修正了[student][i]的
成绩在您的真实代码中,因为它不会编译。

答案实际上是CoffeeandCode

向量没有初始长度:

vector<string> names;
vector< vector<float> > grades;
矢量名称;
向量<向量>等级;
应该是

vector<string> names(1);
vector< vector<float> > grades(1);
矢量名称(1);
向量<向量>等级(1);

答案实际上是咖啡和代码

向量没有初始长度:

vector<string> names;
vector< vector<float> > grades;
矢量名称;
向量<向量>等级;
应该是

vector<string> names(1);
vector< vector<float> > grades(1);
矢量名称(1);
向量<向量>等级(1);

答案实际上是咖啡和代码

向量没有初始长度:

vector<string> names;
vector< vector<float> > grades;
矢量名称;
向量<向量>等级;
应该是

vector<string> names(1);
vector< vector<float> > grades(1);
矢量名称(1);
向量<向量>等级(1);

答案实际上是咖啡和代码

向量没有初始长度:

vector<string> names;
vector< vector<float> > grades;
矢量名称;
向量<向量>等级;
应该是

vector<string> names(1);
vector< vector<float> > grades(1);
矢量名称(1);
向量<向量>等级(1);

我很惊讶代码甚至可以编译,更不用说运行时不会崩溃了。变量
grades
是向量向量的向量,但可以将其用作向量向量的向量。您也不会在外部向量的任何位置添加子向量,因此任何索引都将超出范围。还有一个逻辑问题,即带有
“KEY”
的行也将被读取并添加到向量中,这可能不是您想要的。您的等级向量将开始为空,因此您访问的数组超出范围。在您考虑尝试使用
[]调整大小
保留
或其他东西