一个C语言字符串输入输出问题

2025-12-05 00:42:12
推荐回答(4个)
回答1:

在你输入int类型的n后同时输入了一个换行符, 这使a[0] = '\n'而不是'a', 所以说你的a字符型数组存的其实是'\nabcd', 'e'则没有读入,可以考虑用scanf("%s", a)来读入, 或在输入字符前用getchar()把换行符读掉

回答2:

那是键盘缓冲区残余信息的问题
#include
int main()
{
int a;
char c;
do
{
scanf("%d",&a);
scanf("%c",&c);
printf("a=%d c=%c/n",a,c);
/*printf("c=%d/n",c);*/
}while(c!='N');
}
scanf("%c",&c);这句不能正常接收字符,什么原因呢?我们用printf("c=%d/n",c);将C用int表示出来,启用printf("c=%d/n",c);这一句,看看scanf()函数赋给C到底是什么,结果是 c=10 ,ASCII值为10是什么?换行即/n.对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(/r),一个“换行"(/n),在这里/r被scanf()函数处理掉了(姑且这么认为吧^_^),而/n被scanf()函数“错误”地赋给了c.
解决办法:可以在两个scanf()函数之后加个fflush(stdin);,还有加getch(); getchar();也可以,但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。但是加fflush(stdin);不管什么情况都可行。

回答3:

字符串数组是比你想象的要大一,比如字符串“abc”,长度是四的,因为最后一位存储的是‘\0’....懂了吧。你的n需要加一。

回答4:


for(i=0;i scanf("%c",&a[i]);
换成
scanf("%s",a);
比较好