首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个令人疑惑的小程序,该怎么处理

2012-03-07 
一个令人疑惑的小程序C/C++ code#includestdio.hvoid main(){int i0,jchar ch[10]printf(请输入字符

一个令人疑惑的小程序

C/C++ code
#include<stdio.h>void main(){    int i=0,j;    char ch[10];    printf("请输入字符串的长度:");    scanf("%d",&j);    [color=#FF0000]//char c=getchar();[/color]    printf("请输入元素\n");    while(i<j)   {    ch[i]=getchar();    i++;    }ch[i]='\0';    printf("输出字符串:%s\n",ch);}

这就是个简单的生成一个字符数组的程序,但我的疑问在红色注释处。如果没有这句,ch字符数组的第一个元素将存放回车换行字符,大家可以试一下。这种问题我以前也见过,是在输入字符如scanf或getchar后,按回车,会把回车作为一个字符存储。但这个程序中scanf("%d",&j)后按回车,执行了printf("请输入元素\n")这一句,此时还未对ch字符数组开始赋值,为什么ch也会接受这个回车呢?岂不是违反了顺序执行的原则?找不到理论依据,恳请各位大侠帮忙,不胜感谢。



[解决办法]
因为getchar把什么都读入,包括回车
C/C++ code
  1 #include<stdio.h>  2 int main()  3 {  4     int i=0,j;  5     char ch[10];  6     printf("请输入字符串的长度:");  7     scanf("%d",&j);  8     getchar();  9     printf("请输入元素\n"); 10     while(i<j){ 11         ch[i]=getchar(); 12         i++; 13         getchar(); 14     } 15     ch[i]='\0'; 16     printf("输出字符串:%s\n",ch); 17 }
[解决办法]
scanf("%d",&j);
读入j后会将换行符放回缓冲区供自己或其他函数读取
[解决办法]
http://topic.csdn.net/u/20100413/22/e1f309ba-437c-4375-9eb6-b1be52da6429.html楼主可以看看:

[解决办法]
dPN
顶啊顶啊
3GM
顶啊顶啊
I6a
顶起来!
[解决办法]
建议楼主这样输出看看字符数组里保存的内容.
C/C++ code
#include<stdio.h>void main(){    int i=0,j;    char ch[10];    printf("请输入字符串的长度:");    scanf("%d",&j);    //char c=getchar();    printf("请输入元素\n");    while(i<j)    {    ch[i]=getchar();    i++;    }    ch[i]='\0';    printf("输出字符串:%s\n",ch);    for(i = 0; i < j; i++) {    printf("ch[%d]=%d\n", i, ch[i]);  //输出字符对应的十进制数,10为回车符.    }} 

热点排行