[问题] C 读取档案的换行问题

楼主: phoenix286 (团子大家族)   2021-01-13 11:53:07
开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
code: blocks
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
在练习档案的读写时 读取档案读不到下一行
喂入的资料(Input):

预期的正确结果(Expected Output):
fscanf = 1
line = 26.000000,-74.000000,James
fscanf = 1
line = 26.500000,-73.000000,James
fscanf = 1
line = 27.000000,-72.000000,James
fscanf = 1
line = 27.500000,-71.000000,James
fscanf = 1
line = 28.000000,-70.000000,James
错误结果(Wrong Output):
fscanf = 1
line = 26.000000,-74.000000,James
fscanf = 0
line = 26.000000,-74.000000,James
fscanf = 0
line = 26.000000,-74.000000,James
fscanf = 0
line = 26.000000,-74.000000,James
fscanf = 0
line = 26.000000,-74.000000,James
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
http://codepad.org/f2JGKJsS
补充说明(Supplement):
作者: LPH66 (-6.2598534e+18f)   2021-01-13 12:28:00
因为你是读 [^\n], 所以换行被卡住了一直读不进来第一次读进第一行后停在最后一个换行还没被读掉的地方第二次读一进去就看到换行所以没读任何东西就出来了解决法就只要把那个换行读掉就好, 方法你应该都已经知道
楼主: phoenix286 (团子大家族)   2021-01-13 12:39:00
感谢 多写一个fscanf(%c)就解决了另外请问有没有比较简洁的写法呢?
作者: NciscalA   2021-01-13 14:04:00
"%79[^\n] "在最后加个空格试试
作者: LPH66 (-6.2598534e+18f)   2021-01-13 14:14:00
楼上这是一个解法, 但要注意因为这个空格会吃掉连续空格所以如果下一行开头也有空格会被吃掉在这里是没有不过在其他的应用要注意
楼主: phoenix286 (团子大家族)   2021-01-13 15:35:00
不太理解为什么加空格能运作呢 请问这里的空格是指什么呢?
作者: LPH66 (-6.2598534e+18f)   2021-01-13 16:46:00
scanf 里放空格会吃掉输入中连续的 whitespace 字符这包含空格字符跟换行字符, 它会吃掉输入中这些字之后丢掉
作者: ddavid (谎言接线生)   2021-01-18 11:10:00
虽然写起来可能比较反而复杂,但我比较喜欢fgets一行进来后再对那行字串做处理的方式,只要写成function模组化其实用起来还是方便且出错容易知道问题例如将原本的code改成先 str_line = fgets(...);然后才用sscanf(str_line, "...", ...);不过fgets读取有上限长度,这方面还要确认一下使用例会不会容易莫名其妙发生过长列需要额外处理

Links booklink

Contact Us: admin [ a t ] ucptt.com