在C ++中,从标准输入中提取整数的简单方法是什么?

时间:2015-09-12 13:57:00

标签: c++

我是初学者,遇到常见问题。我试图在C ++中逐行读取标准输入,其中每一行是[整数] [逗号] [整数]。例如:

1,1
2,3
12,5

等。我想只使用每行中的整数并将它们分配给单独的变量。我的代码中那些困扰我的部分看起来像这样:

int x,y;
for (string line; getline(cin, line); ) {
   // ...want to have something like
   // x = first integer, y = second integer
   // process x and y
}

基本上,我并不关心在每一行上存储整数的值,但我确实想处理每对整数来比较它们或其他什么。

我注意到其他使用向量,字符串流,令牌和/或分隔符的解决方案,但是那些几乎总是用于每行有多个分隔符的输入行 - 这里我们每行只有1个,所以我想可能有一个更简单的解决方案。

感谢您的时间和耐心。

2 个答案:

答案 0 :(得分:2)

试试这个:

#include <iostream>
#include <sstream>
#include <string>

// ...

for (std::string line; std::getline(std::cin, line); )
{
    std::istringstream iss(line);
    int x, y;
    char c;
    if (!(iss >> x >> c >> y >> std::ws) || iss.get() != EOF || c != ',')
    {
        std::cerr << "Cannot parse line '" << line << "'.\n";
        continue;
    }

    std::cout << "Input: " << x << ", " << y << "\n";
}

(这个逻辑实际上允许比您在示例中给出的更宽松的输入(关于空格);如果您希望匹配是严格的,则必须不跳过空格。)

答案 1 :(得分:0)

要从标准输入读取,您可以使用cin命令。将输入读作string并相应地解析以获得输入。

但是,您在此处输入的是预定义格式,我们可以使用scanf将其用于我们的优势。您的代码如下:

int x,y;
while (scanf("%d,%d",&x,&y) == 1) 
{
  ...
  ...
}

%d,%d表示scanf以整数形式查找输入,后跟逗号,后跟整数。如果输入不是指定的格式,scanf(...) == 1将评估为false,如果用户按Enter键两次(或提供其他输入),将有助于退出while循环。