#include "stdio.h"void main(){char ch;scanf("%c",&ch);while (ch!='\n'){if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'){ch=ch+3;if(ch>'Z'&&ch<'Z'+4||ch>'z')ch=ch-26;}printf("%c ",ch);scanf("%c",&ch);}}如上程序是为了完成输入字符串的加密,将全部的字母都换成它的后面第三个字符,在输入时是一次性输入一串字符的,如:abc123,它的结果应该是def123;现在我不明白的是:scanf()函数只能一次接收一个字符串,那么我一次性输入的相当于是一个字符串,那计算机内部可能是以下的哪一种情况:1、我输入的字符先不进行运算,晢时存在一个非&ch的地方,如什么缓冲中,待我一次性全部输完,打击回车后,再开始运行程序,遇到scanf时再依次从晢存的地方将字符录入ch;2、在我输入过程中即开始运算,即当我输入完成a与将要输入b的间隙,计算机已开始运行,毕竟有了第一个字符,下面的程序已经能够进行运算了,这样,只要有一个字符输入,计算机马上开始工作,而在此过程中,printf()产生的结果则暂时存在一个暂存区,等待回车时一并输出到屏幕上。这两种运行情况倒底是哪一个呢?还是哪个都不是,还有别的解释?希望大侠们不吝惜赐教!谢谢!
2 回答
开心每一天1111
TA贡献1836条经验 获得超13个赞
scanf 从标准输入流的缓冲区,按格式定义,读取数据。
如果缓冲区没有内容,或刚开始输入但尚未拍入"\n" 前, scanf 就等待。
拍入"\n"后,scanf 开始工作,按格式定义,读取数据。读过的部分就清掉,读剩的部分还留在缓冲区,下一句 scanf (或类似的其它输入函数,getchar,gets...) 接着从 剩余部分读起,读空了不够读就等待输入。
fflush() 可用于清除 缓冲区 剩余内容。
吃鸡游戏
TA贡献1829条经验 获得超7个赞
是你说的第一种。你一次性输入的字符串是连续的在一块内存中。然后scanf函数去了这个字符串里面的第一个。所以就是这样的情况。
你可以自己在 while语句那里设置一个断点,调试一下看看。
- 2 回答
- 0 关注
- 306 浏览
添加回答
举报
0/150
提交
取消