咕咕咕咕7 2022-11-12 21:09 采纳率: 100%
浏览 23
已结题

c语言,关于getchar,与scanf读取同一串字符,原理是怎样

c primer plus中有这样一道程序,输入一个字符与两个数字,打印成阵

img

假设输入的是C 1 2

对于getchar与scanf的读取情况,我的理解是:
一行字符输入,回车。
ch=getchar 读取了C,进入while循环。
scanf读取 1 2 。
内循环getchar读取\n 。
结束。

对于这样的读取我理解为,输入一串字符,每读取一次就会把,读取的东西从原字符串删去,这样就方便开始下一次读取。但是,下一道程序让我有了疑惑,

img

这是验证输入的是否为数字的自定义函数,假设输入的是
apple 1
那么我的理解是 :
scanf读取apple,进入循环。
getchar读取 1 ,输出 1 is not a integer 。

但实际上,输出的是 apple 1 is not a integer 。

这就与我先前的理解出现了矛盾。
在scanf读取 apple 后,
内循环gerchar重新把scanf读取过的再读取了一次,
而不是我想象中的仅仅把scanf没读取掉的进行读取。

我后来又打了几个程序进行思考,但都是符合我的原来的想法的,所以这个程序到底为什么让getchar读取到scanf读取过的数据呢?不知是不是我悟性太差,我脑子就此打结了,所以在此寻求各位帮助,感谢

  • 写回答

1条回答 默认 最新

  • 谢玄. 2022-11-14 14:46
    关注

    你去看
    scanf("%ld",&input) 他要读取的是什么,是一个数字.
    但是你输入的是 apple 1 显然一开始读取是读取不到数字的,于是就不会读取,并且 scanf 的返回值会变成 false 。
    于是就进入循环里面了。循环里面的 getchar 就是从 a 开始读取了,因为 scanf 并没有读取任何内容

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月26日
  • 已采纳回答 11月18日
  • 创建了问题 11月12日

悬赏问题

  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果