猿问

关于scanf函数的运行过程,求答疑解惑~

#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()产生的结果则暂时存在一个暂存区,等待回车时一并输出到屏幕上。这两种运行情况倒底是哪一个呢?还是哪个都不是,还有别的解释?希望大侠们不吝惜赐教!谢谢!

隔江千里
浏览 307回答 2
2回答

开心每一天1111

scanf 从标准输入流的缓冲区,按格式定义,读取数据。如果缓冲区没有内容,或刚开始输入但尚未拍入"\n" 前, scanf 就等待。拍入"\n"后,scanf 开始工作,按格式定义,读取数据。读过的部分就清掉,读剩的部分还留在缓冲区,下一句 scanf (或类似的其它输入函数,getchar,gets...) 接着从 剩余部分读起,读空了不够读就等待输入。fflush() 可用于清除 缓冲区 剩余内容。

吃鸡游戏

是你说的第一种。你一次性输入的字符串是连续的在一块内存中。然后scanf函数去了这个字符串里面的第一个。所以就是这样的情况。你可以自己在 while语句那里设置一个断点,调试一下看看。
随时随地看视频慕课网APP
我要回答