我有一个文件例如
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“垃圾”线,然后移动到。 #。 。并将它们存储在我的数组中。那会是最好的方法吗?
答案 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;
}