A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 初楠 中级黑马   /  2015-5-2 16:45  /  765 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#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运行原理怎么运行的

2 个回复

倒序浏览
我感觉它的运行原理和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,然后没等反应就输出乱七八糟的东西。

希望我的分析对你有帮助

评分

参与人数 1黑马币 +2 收起 理由
仰望的繁华 + 2 热心助人

查看全部评分

回复 使用道具 举报
自己慢慢分析吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马