黑马程序员技术交流社区

标题: 关于getchar 用发的问题 [打印本页]

作者: 初楠    时间: 2015-5-2 16:45
标题: 关于getchar 用发的问题
#include<stdio.h>
void main()
{
char ch;
int key;
printf("请输入key");
scanf("%d",&key);
printf("请输入明文\n");
ch=getchar();
while(ch!='\n')
{
  putchar(ch+key);
  ch=getchar();
}
}
程序运行就能输入key   为什么   哪里不对    getchar运行原理怎么运行的
作者: kailee    时间: 2015-5-2 20:12
我感觉它的运行原理和scanf差不多,我写过一篇文章关于scanf的,希望你能对比理解一下:
http://kai-lee.com/2015/04/22/C%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B8%80/#more

getchar函数也是一个阻塞式函数,它等待从输入流读取一个字符,我们在控制台需要输入至少两个字符才能保证这个函数的执行。
你这个问题的分析:

1.假设输入了“key”是三个字符再加上回车符缓冲区有4个字符之多
2.当程序读完第一个字符“k”后,就把第一个字符赋值给了 scanf函数,接着剩下缓存中的“ey”以及那个回车符就被getchar读去了,然后执行你的while,然后没等反应就输出乱七八糟的东西。

希望我的分析对你有帮助
作者: 大家叫我小祥子    时间: 2015-5-2 23:17
自己慢慢分析吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2