C运行机制 想不通求解
#include <stdio.h>void main()
{
char c;
printf("输入字符:\n");
while ((c=getchar()) != '\n') //从输入获得字符,回车结束
{
if ((c >= 'A' && c <= 'Z')||(c >= 'a' && c <= 'z')) //如果输入A到Z或者a到z,则加4
{
c=c+4;
if ((c > 'Z' && c <= 'Z'+4) || (c > 'z')) //w,x,y,z特殊情况处理
{c=c-26;}
}
printf("%c",c); //输出,如果输入不是字母,直接原样输出
}
printf("\n");
}
以上是译文题我写的答案,但是我有个不懂的地方, while ((c=getchar()) != '\n') 这句是输入字符赋值给C直到C=回车。
那么我输入单个字符给C赋值,条件成立 运行加密过程,当我输入多个字符时 后面的字符应该覆盖掉前面C的值
为何输出时却并不是输出最后输入的字符的加密结果,而是所有字符的加密结果。
程序并没有对C的值储存啊,这是什么机制。我一直弄不懂。
按照程序运行过程,应该我输入一个字符就给出一个结果,为什么是我输入完所有字符后,才输出结果。
求大神解惑! 在getchar()输入的字符串并不是取了第一个字符就把剩下的字符串丢掉了,它还在我们的内存中,就好比,开闸放水,我们把水放到闸里去以后,开一次闸就放掉一点,开一次就放掉一点,直到放光了为止,我们输入的字符串也是这么一回事,首先我们输入的字符串是放在内存的缓冲区中的,我们调用一次getchar()就把缓冲区中里出口最近的一个字符输出,也就是最前面的一个字符输出,输出后,就把它释放掉了,但后面还有字符串,所以我们就用循环把最前面的一个字符一个个的在内存中释放掉,直到不满足循环条件退出为止。 夜雨de街灯 发表于 2016-5-20 10:32
在getchar()输入的字符串并不是取了第一个字符就把剩下的字符串丢掉了,它还在我们的内存中,就好比,开闸 ...
谢谢大大的解释,好像明白了。 不解释 发表于 2016-5-20 10:35
谢谢大大的解释,好像明白了。
scanf也会有这种情况{:10_242:} 顶 原本的我也不懂,现在明白了 2楼讲的很明白
还有一个比较专业的名词解释
用户进行键盘输入时,对应的字符输入到操作系统的键盘缓冲区中,getchar()一次从输入流(stdin)读取一个字符 好1NB,学习了{:5_101:}
页:
[1]