C++ 如何忽略输入中的n个整数

C++ 如何忽略输入中的n个整数,c++,input,C++,Input,我正在尝试从输入读取最后一个整数,例如- 100 121 13 ... 7 11 81 我只对最后一个整数感兴趣,因此希望忽略所有整数 以前的整数 我曾想过使用cin.ignore,但由于 未知整数(100为3位数字,13为2位数字,依此类推) 我可以使用循环一个接一个地输入整数,而不使用它们。有更好的方法吗?试试这个: for( int i=0; i<nums_to_ignore; i++) { int ignored; std::cin >> igno

我正在尝试从输入读取最后一个整数,例如-

100 121 13 ... 7 11 81
  • 我只对最后一个整数感兴趣,因此希望忽略所有整数 以前的整数
  • 我曾想过使用
    cin.ignore
    ,但由于 未知整数(100为3位数字,13为2位数字,依此类推)
我可以使用循环一个接一个地输入整数,而不使用它们。有更好的方法吗?

试试这个:

for( int i=0; i<nums_to_ignore; i++) {
    int ignored;
    std::cin >> ignored;
}
for(int i=0;i>被忽略;
}

您可以尝试这个简单的解决方案,动态忽略除此问题中最后一个给定值之外的其余值,如下所示:

int count = 0;
int values, lastValue; // lastValue used for future use

std::cout << "Enter your input: ";

while (std::cin >> values) {
    lastValue = values; // must be used, otherwise values = 0 when loop ends
    count++;
}

std::cout << lastValue; // prints

这完全取决于您拥有的用例

std::cin
读取非指定数量的整数似乎不是那么容易。因为,与从文件读取相比,您不会有EOF条件。如果您要从文件流读取,那么它将非常简单

int value{};
while (fileStream >> value)
    ;
如果您使用的是
std::cin
,您可以尝试按CTRL-D或CTRL-Z或在终端上工作的任何键来生成EOF(文件结束)但通常的方法是使用
std::getline
读取一个完整的行,直到用户按enter键,然后将该行放入
std::istringstream
并从中提取

到目前为止,下面给出的一个答案不是很好

因此,下一个解决方案是:

std::string line{};
std::getline(std::cin, line);
std::istringstream iss{line};
int value{};
while (iss >> value)
    ;
你在问

有更好的办法吗

这也取决于一点。如果您只是读取一些整数,那么请使用上述方法。如果您有许多值,那么您可能会浪费时间,不必要地将许多子字符串转换为整数和空闲时间

然后,最好先读取完整字符串,然后使用
rfind
查找字符串中的最后一个空格,并使用
std::stoi
将最后一个子字符串转换为整数

警告:在这种情况下,您必须确保(或检查更多代码行)末尾没有空格,最后一个子字符串实际上是一个数字。这是大量的字符串/字符篡改,这很可能是可以避免的


因此,我建议使用getline stringstream方法。

您使用了什么样的cin语句进行输入?如果您这样说会更好。我不确定最后一个整数是什么意思……给定
100 121 13…7 11 81
您想输出
81
还是
0 1 3…7 1 1 1
?是@Roy,给定
100 121 13…7 11 81
我想使用81(进一步)。因为您只对最后一个值感兴趣,所以不需要数组。只需重复使用同一个变量即可。@john退出while循环后,该值将重置为零(在调试模式下看到)但是,我在这个循环中找到了一个好的解决方案。我找到了一个解决问题的方法!只是用了另一个变量。删除了数组。好点(关于值设置为零)。这是C++标准(C++ 11)的一个变化。在旧版本的C++中,这是不可能的。我认为旧的方法更好,这就是一个很好的例子。
std::string line{};
std::getline(std::cin, line);
std::istringstream iss{line};
int value{};
while (iss >> value)
    ;