我的输入是一行,例如:
12345 14 14 15 15
其中12345是学生的身份证号码,其大小可能不同,其余的输入是学生的分数。从这一行开始,我试图将id存储到一个变量中,然后将我将转换为int数组的分数转换为另一个变量。我尝试过这样的事情:
int id;
std::string scores;
std::cin >> id;
std::cin.ignore(' '); //ignore the space after the id number
std::getline(std::cin, scores); //store the rest of the line into scores
这似乎并没有起作用。这样的事情可能吗?
我认为我可以使用子字符串来分隔这两个部分,但由于id号的长度可能会有所不同,所以我不认为我能够。
解决我想要做的事情的最佳方法是什么?对不起,如果这是微不足道的;我还是C ++的初学者。
答案 0 :(得分:2)
std::basic_istream::ignore()
没有按照您的想法行事。如果你咨询suitable reference,你会发现第一个参数是要忽略的字符数,第二个参数是分隔符。您基本上要求它忽略32个字符(因为32是空格的ASCII代码)。
你想要这个:
int id;
std::string scores;
std::cin >> id;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), ' '); //ignore all characters until a space is found
std::getline(std::cin, scores); //store the rest of the line into scores
或者,如果你知道它之后总会只有一个空格,只需在没有参数的情况下调用std::cin.ignore();
,因为这意味着忽略1个字符。
答案 1 :(得分:2)
我不确定什么不起作用,但我当然不会使用ignore()
来忽略分隔空间。相反,我只是使用
std::getline(std::cin >> id >> std::ws, scores);
操纵器std::ws
将忽略所有空格。