【发布时间】:2021-03-05 13:42:48
【问题描述】:
有什么方法可以识别getline是因为换行还是因为EOF而结束?
所以,我想区分一下:
1。 阿尔法\n测试版\n伽马\n EOF
2。 alfa \n beta \n gama EOF
在第二种情况下,我不想将 gama 读取为新字符串,我想说的是,最后一个字符串的读取不成功。我正在使用 while 循环来读取行。
我无法编辑传入的数据。
可能有可能通过使用 getchar 来解决这个问题。然而,它使阅读线更加复杂:-/
非常感谢
【问题讨论】:
-
您可以使用
feof函数在流上测试EOF,但它不会返回true,直到之后您尝试阅读过去文件结束。 -
用 fgetc 读取下一个字符,检查它的 EOF,如果没有,用 ungetc 放回去。
-
我不知道你为什么不能只使用
getline。在这两种情况下,您都会一次获得一条线路。在 EOF 上,返回值为 -1。但是,直到 第四次 调用你才能得到它。在第一种情况下,返回顺序将是:5,5,5,-1,在第二种情况下,它将是:5,5,4,-1只有最后行可以不同,你可以看:buf[len - 1] == '\n'。无法在同一个调用中同时获得非零长度和 EOF 指示。