C语言scanf

loveqise 2016-09-24 08:31:52
我写了如下代码 while(1) { fscanf(fp,“s%”,name)puts(name) } 其中fp为FILE指针,name为数组 请问当文件中第一次读入的字符串较长,第二次读入字符串较短的情况,输出较短字符串时为什么不会把之前读入字符串后几位一起输出? 我的想法是fscanf读完一个单词进入第二次循环后,会在单词末尾加空字符,不知道对不对!
...全文
231 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-09-26
  • 打赏
  • 举报
回复 1
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
hijack00 2016-09-26
  • 打赏
  • 举报
回复
fscanf(fp,“s%”,name)puts(name)是几个意思? 应该编译通不过吧? fscanf(fp,“%s”,name); puts(name); "我的想法是fscanf读完一个单词进入第二次循环后,会在单词末尾加空字符,不知道对不对!" 不是在字符串末尾加空字符,而是加字符串结束符,即'\0'
loveqise 2016-09-24
  • 打赏
  • 举报
回复
引用 2楼paschen 的回复:
http://en.cppreference.com/w/c/io/fscanf
If width specifier is used, matches up to width or until the first whitespace character, whichever appears first. Always stores a null character in addition to the characters matched (so the argument array must have room for at least width+1 characters)
loveqise 2016-09-24
  • 打赏
  • 举报
回复
引用 1楼fefe82 的回复:
第一次循环也会加空字符啊。 %s 会自动加 '\0' 的。
就是读完%s后scanf会在结尾加空字符吗?
paschen 2016-09-24
  • 打赏
  • 举报
回复
http://en.cppreference.com/w/c/io/fscanf
fefe82 2016-09-24
  • 打赏
  • 举报
回复
第一次循环也会加空字符啊。 %s 会自动加 '\0' 的。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧