我是初学者,遇到常见问题。我试图在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个,所以我想可能有一个更简单的解决方案。
感谢您的时间和耐心。
答案 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循环。