C语言 字符串数组

#include<stdio.h>
void main()
{
int i,n;
char p[100];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%c",&p[i]);
}
for(i=0;i<n;i++)
{
printf("%c",p[i]);
}
}

输入多个字符,却只能输出一个字符,不知道问题出在哪了,请指教!

导致这个问题的原因是缓存满了,要使用语句
fflush(stdin) 将缓存清空可正常执行
此语句不建议经常使用,但却是没有办法的办法了,这是C语言的不足,在其他的高级语言中向这样的错误就不存在,在学C的时候先应付着
赶快去试试吧…………

#include<stdio.h>
main()
{
int i,n;
char p[100];
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("now i is :%d\n",i);
fflush(stdin);//清空缓存
scanf("%c",&p[i]);
}
for(i=0;i<n;i++)
{
printf("the location of the point is :%d\n",i);
printf("%c",p[i]);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-07
建议你在scanf("%c"的%前面加个空格,即scanf(" %c",&p[i]); 可以参考下参考网址。

参考资料:

第2个回答  2010-06-07
第五行改成 char p[100]={'\0'}试试;

或者用我的这个 #include<stdio.h>
void main()
{
char p[100]={'\0'};
printf("\n\t input the array!! \n\t p=");
scanf("%s",p);
putchar('\n');
printf("\n\t the array you put is\n\t p=");
puts(p);
}
第3个回答  2010-06-07
譬如
你输入4hello,输出是hell,
你表达是这个意思吗?
如果你输入4回车hello的话,输出的是hel。
因为回车也占用了字符数组的元素。。
第4个回答  2010-06-07
程序本身没有任何问题,我运行了一下,能输出正确结果(windows XP的操作系统,VC++编译器)
第5个回答  2010-06-07
下面正解:绝对先深入您的内心,然后再解决您的疑惑!
在你调试这个程序时,你是不是这样做的呢?
输入步骤:5<回车>abcde<回车>
输出结果:abcd
这时,聪明的你可能会发现,为什么输出的字符总比输入的要少一个呢?这正是问题所在。为什么呢?
原因就在于以下循环结构内外的两个输入语句是连续的。
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%c",&p[i]);
}
以上语句就相当于:
scanf("%d",&n);
scanf("%c",&p[0]);
scanf("%c",&p[1]);
scanf("%c",&p[2]);
scanf("%c",&p[3]);
...........
所以当你输完数字输回车的时候,事实上,回车已经作为一个字符被读入数组的第一个元素。
完毕。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网