Cin来自stdin,当他结束了一条线

时间:2013-01-27 04:27:30

标签: c++ input cin

我有一个文件例如

M
4
2
//comments
.#..

通过stdin给程序。我不能使用fstream,只能使用iostream。

如果我想逐字逐字地阅读整个事物,我可以吗?

char first_letter, first_num, second_num;
cin >> first_letter;
cin >> first_num;
cin >> second_num;

或者这条线的结尾会搞砸?如果,在为first_letter读取M之后,cin是否知道它需要到达终点线?

其次我不想阅读评论专栏。我的计划是,如果我看到/我将使用getline“垃圾”线,然后移动到。 #。 。并将它们存储在我的数组中。那会是最好的方法吗?

1 个答案:

答案 0 :(得分:1)

首先,默认情况下,流会跳过空格(空格,制表符,换行符),因此该部分很容易。

现在,关于评论行,这有点复杂。您可以使用std :: getline()读取一行。这将把行存储在一个字符串中并丢弃尾随的换行符。但是,如果你是读取上面代码中的第一个字母,换行符保留在流中,因此getline()将读取一个空字符串。简而言之,不要混合基于行和基于令牌的输入。

实际上,您读取了一行并手动解析它或者为此创建了一个流:

while(getline(in, line)) {
    if(line.empty()) continue; // empty line
    if(line[0] == '#') continue; // comment line
    // parse line
    std::stringstream s(line);
    char c;
    s >> c;
}