C语言问题
运行下面的程序,如果键盘上输入:ab<回车>c<回车>def<回车>则输出结果为____.#defineN6#include<stdio.h>main(){charc[N...
运行下面的程序,如果键盘上输入: ab<回车> c<回车> def<回车> 则输出结果为____.
#define N 6
#include <stdio.h>
main ()
{
char c[N];
int i=0;
for ( ; i<N;c[i]=getchar(),i++);
for(i=0;i<N;i++) putchar(c[i]);
printf("\n);
}
求每一步详细解答!!!
不是getchar()只能接受一个字符么? 那么c[0]等于a 然后跳到for(i=0;i<N;i++) putchar(c[i]);
那么输出的就是c[0]所以就是a, 接下来不是 继续for(i=0;i<N;i++) putchar(c[i]);的循环 i=1 但是c[1]没有值所以第一行只有一个a 不是一直等到for(i=0;i<N;i++) putchar(c[i]);结束之后才会跳回for ( ; i<N;c[i]=getchar(),i++);吗
我的理解就是答案是
a
c
d
其中a与c与d的间距为6行
以上是我的思路 到底哪错了!!!!!求解!!! 展开
#define N 6
#include <stdio.h>
main ()
{
char c[N];
int i=0;
for ( ; i<N;c[i]=getchar(),i++);
for(i=0;i<N;i++) putchar(c[i]);
printf("\n);
}
求每一步详细解答!!!
不是getchar()只能接受一个字符么? 那么c[0]等于a 然后跳到for(i=0;i<N;i++) putchar(c[i]);
那么输出的就是c[0]所以就是a, 接下来不是 继续for(i=0;i<N;i++) putchar(c[i]);的循环 i=1 但是c[1]没有值所以第一行只有一个a 不是一直等到for(i=0;i<N;i++) putchar(c[i]);结束之后才会跳回for ( ; i<N;c[i]=getchar(),i++);吗
我的理解就是答案是
a
c
d
其中a与c与d的间距为6行
以上是我的思路 到底哪错了!!!!!求解!!! 展开
5个回答
展开全部
追问
问题补充已经更改,求再看看 谢谢!!
追答
更简单了
for ( ; i<N;c[i]=getchar(),i++); 这个 注意看 后面有个分号
其实是等同于
for ( ; i<N;c[i]=getchar(),i++)
{
;
}
那么跟下面的关系就是
for ( ;i<N;c[i]=getchar(),i++)
{
;
}
for(i=0;i<N;i++)
{
putchar(c[i]);
}
因此是要接收完6次 才会到下个for循环这里
展开全部
输出为:
ab
c
d
因为一个回车占两个字符,即“\n\r”,但读的时候,抛弃了\r,但\n是被保留读取的,所以出现了这个结果。可理解?
对于补充问题:首先你没有了解C++/C中的输入输入机制。当进行输入时,系统自动创建一块内存区域接受键盘输入,键盘对当前程序的都存在该缓存区。在程序调用getchar时候其实是从该缓存区读入的,所以回车键是绝对不会放过的。有的函数可以逃脱回车键是因为他对回车键输入ANSC码进行了处理。但是有的函数却没有处理。
ab
c
d
因为一个回车占两个字符,即“\n\r”,但读的时候,抛弃了\r,但\n是被保留读取的,所以出现了这个结果。可理解?
对于补充问题:首先你没有了解C++/C中的输入输入机制。当进行输入时,系统自动创建一块内存区域接受键盘输入,键盘对当前程序的都存在该缓存区。在程序调用getchar时候其实是从该缓存区读入的,所以回车键是绝对不会放过的。有的函数可以逃脱回车键是因为他对回车键输入ANSC码进行了处理。但是有的函数却没有处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for ( ; i<N;c[i]=getchar(),i++); 会读进6个字符,包括回车
for(i=0;i<N;i++) putchar(c[i]); 打印6个字符
输出应该是
ab<回车> c<回车> d
for(i=0;i<N;i++) putchar(c[i]); 打印6个字符
输出应该是
ab<回车> c<回车> d
更多追问追答
追问
问题补充已经更改,求再看看 谢谢!!
追答
for ( ; i<N;c[i]=getchar(),i++); 有分号;
如果没有分号应该跟你说的差不多,但是也不是6个换行,因为c里面的值是未知的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的理解错了,输出的是c[0]=a,c[1]=b,c[2]是有值的为“换行符”,c[3]=c,c[4]="换行符”,c[5]=d,。那为什么输入的时候可以输入ef呢?那是因为一个getch(),可以接收在定义的char c[]的类型数据的范围内的所有字符,换句话说getch()接收的字符是由你定的,只要大小不超过数据类型的大小范围(一般情况下都是不可能的)都会输入到屏幕上(因为你有一条赋值语句c[i]=getchar(),如果没有,你输入的那些东西都会被视为没有或没作用,不会在屏幕上出现的),但是,(c[i]=getchar(),)实际上只有前六个字符被存储到字符数组c上。而ef则有系统自动随机开辟个空间存储它,编译结束就清空。(都是数组c的存储空间上)第一个for循环的作用就是给数组c赋值,第二个for循环,就是一次输出,数组c的值。第一个for和第二个是没有关系的,因为他们之间有分号间隔,表示两个不同语句。在编译过程是逐条编译的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
v能接收一个d了 因此 输出就是 ab回车 c 回车 d print
追问
问题补充已经更改,求再看看 谢谢!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询