假设我有几个数字的文件input.txt
1 2
4 51
3 77
现在,我正在尝试执行此命令:
`string filename="input.txt";
ifstream ifs;
ifs.open(filename);
ifs>>x>>y;
fstream tmp("temp.txt",ios::out);
tmp<< ifs.rdbuf(); `
现在文件temp.txt看起来像
(空白区)
4 51
3 77
所以,这是空的空间,因为我没有读到行尾吗? &#34; IFS&#34; ponter刚刚被移动了两个整数,剩下的线路终止了。 为什么在第一个文件中,我可以使用
循环 ifs>>x>>y;
而在第二个(tmp)没有?另一方面,如果我手动创建具有空白空间的temp.txt,则上面的命令会立即生效。为什么这不一致?
感谢。
答案 0 :(得分:2)
输入操作符,例如字符串和数字(整数和浮点数),跳过前导空格。
如果您想在阅读前两个数字后删除尾随空格,只需ignore
直到该行的结尾。
答案 1 :(得分:2)
因为ifs >> x >> y;
在第一行的数字后没有读取换行符。您可以通过添加ifs.get()
或其他类似内容来修复此特定情况,但在通用情况下[例如如果文件是1 2 <newline>
,文件中仍然会有一堆空格和换行符 - 只比没有get
调用时少一个,所以你必须阅读输入文件并确定文件中的内容。
正如Joachim建议的那样,您可以使用ignore
跳到下一个换行符,但如果您有多个换行符,它将再次获得帮助。