请问一个C语言的问题.

chenziqing030 2003-03-06 12:44:46
程序如下:
#defind N 6;
main()
{
int i=0;
char ch[N];
for(;i<N;i++)
ch[i]=getchar();
for(i=0;i<N;i++)
putchar(ch[i]);
printf('\n');
}
如程序运行后输入:
ab 回车
c 回车
def 回车
运行结果竟是:
ab
c
d
以下是我的几个问题:
当第一次输入ab后,
for(;i<N;i++)
ch[i]=getchar();
这条语句循环了6次,但getchar()只是接收了2个字符,那后4次循环ch[i]=getchar()这条语句会起作用吗?
然后,当第二次,第三次输入后,main函数是从哪执行起的?是从头执行全部语句,还是只是执行两个for语句?

请指教,谢谢!
...全文
36 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
susan7703 2003-03-06
  • 打赏
  • 举报
回复
我也经常范这样的错误,细心是一个程序员最重要的素质
aka2006 2003-03-06
  • 打赏
  • 举报
回复
错误可能源于对输入输出的理解
aka2006 2003-03-06
  • 打赏
  • 举报
回复
回车的问题
a b 回车 c 回车 d 总共6个,因为getchar()取出每一个key的ascii码,

如果这样输入abcedf ,试试看,是输出abcdef,已在vc中调试通过!

你的源程序,修改完全版如下:
#include <stdio.h>

#define N 6

void main()
{
int i=0;
char ch[N];
for(;i<N;i++)
ch[i]=getchar();
for(i=0;i<N;i++)
putchar(ch[i]);
printf("\n");
}



whhif 2003-03-06
  • 打赏
  • 举报
回复
getchar函数是不清除键盘缓冲区的,因此你的回车输入就不会自动清除.
所以你的输入并不完整.你可以在每次调用getchar后,再调用getchar一次
来消除回车.

在执行两次输入以后,当然还是要执行for循环了.
ckacka 2003-03-06
  • 打赏
  • 举报
回复
getchar()是从标准输入设备获取输入,并且显示在标准输出设备上
这里的输入包含了你敲入的“回车”,也就是说,“回车”本身也是一个字符,事实上也是如此
你的测试是
ab 回车
c 回车
def 回车
那么这里的 d 就已经是第六个输入了,后面的将被丢弃!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧