吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 82|回复: 4
收起左侧

[求助] 关于在c语音学习中的一个困惑

[复制链接]
yikaxinkong 发表于 2026-3-9 17:05
最近刚刚入门c语言,但是在学到写课后习题的时候有了一个疑惑
入下图所示,虽然是两个不同的程序,但都是通过((c=getchar())!='#')来实现“读取输入,读到#字符停止”
图2(图1是源代码)我未输入#,只是按下了enter键就开始转换为ascii码
但是图3(运行我忘拍了,就是统计空格 换行符 总体字符数量的一个程序)我输入一些字符,再按下
enter键,不会进行打印。而是先输入#再按下enter键才会开始打印
我就是想知道原理相似的两个程序,为什么一个可以实现一个实现不了,是我源代码的问题,还是编译器的问题。
备注,我的编译器是minGW64

图1

图1

图2

图2

图3

图3

点评

建议善用搜索引擎和ai工具  发表于 2026-3-9 23:47

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
怜渠客 发表于 2026-3-9 23:20
提示: 该帖被管理员或版主屏蔽
N0NeckKing 发表于 2026-3-10 00:51
1.你的第二个程序中在循环体内并没有打印相关的代码,这就导致了不一致,不能用这两个代码进行比较
你得明确问题其实是出现在了while循环体中
2.c语言的不同输入输出函数关于其中默认值需要简单了解下,就是所谓的格式化输入输出,其实你的printf中也在用,输入是有缓冲区的
这个缓冲区在不同参数下运行状态是不一样的,默认的情况下getchar是有一个行缓冲区的输入流,其实原本是为了保证更好的交互体验
错了可以用删除键删一删等一些原因,回车就是触发把一行的缓冲区内容发送给程序,程序进入了循环体,所以有了输出,你的#是中止循环体,而不是中止缓冲区
liyitong 发表于 2026-3-10 00:52
while和getchar()一起的时候,输入是先缓存下来,然后一并交给编译器,去按个执行的。
按回车键表示输入完毕,开始往内存中输入字符串。遇到#,触发预先设定。
如果输入过程中没有#,那么按回车,输入到内存,没遇到#,自然不会执行预先设定好的。
简而言之,判断是一个一个的,输入是一整下输入。怎么做到一个一个,当然是用你设定好的#,分隔符。
回车键是表示你从键盘的输入完毕了,接下来该编译器干活了。
这不属于编程语言的问题,是操作系统把输入进行了优化,导致运行结果和教材理论有所出入。
你自己的理解没有错,是操作系统给多做事了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-3-10 03:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表