C语言问题,下面程序为什么我输入abc回车后,直接就输出abc了

#include "stdio.h"
int main()
{
int i,n,j;char c[20],a[20],b;
while(1)
{scanf("%s",a);
scanf("%c",&b);
j=0;
for(i=0;a[i]!='\0';i++)
{
if(a[i]!=b) c[j++]=a[i];
}
for(n=0;n<j;n++)
printf("%c",c[n]);
printf("\n");
}
}

原因:
第一个scanf 从输入缓冲区中取数据(所谓的输入),手动输入数据时只取出回车符号(或者是空格符号)之前,紧接着就是第二scanf 开始从输入缓冲区中取数据,此时输入缓冲区中还存在第一次输入的回车符,所以就直接取出(也不会给你机会输入了),继续向下执行了。

解决方案:
在scanf 输入之前,加上 fflush(stdin); 目的是清空输入缓冲取,使输入缓冲区下次取出数据之前是干净的。

希望可以帮助到你。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-23
scanf("%s",a); //回车符没有从缓冲区取出,会影响后面的输入
==> scanf("%s%*c",a); //取出并舍去一个字符(回车符),
第2个回答  2012-10-23
scanf("%s",a);改为scanf("%s\n",a);试试。
第3个回答  2012-10-23
scanf("%c",&b);改为scanf(" %c",&b); %c前加一个空格 来吸取输入时的回车符。

C语言问题,下面程序为什么我输入abc回车后,直接就输出abc了
原因:第一个scanf 从输入缓冲区中取数据(所谓的输入),手动输入数据时只取出回车符号(或者是空格符号)之前,紧接着就是第二scanf 开始从输入缓冲区中取数据,此时输入缓冲区中还存在第一次输入的回车符,所以就直接取出(也不会给你机会输入了),继续向下执行了。解决方案:在scanf 输入之前,加...

c语言 以下程序为什么输入abc abc结果输出只abc 有空格时为什么会断开...
因为这时scanf的特性,当它里面使用的是%s说明符时,它只能读取一个“单词”(意思就是,遇到空白字符(换行、空格、制表)就会中断)。如果想读入一行字符(即使中间有空格),就用gets(s);吧

C语言 输出出现过的大写字母 如 输入 ABCabcABC 输出ABC
for(i=0;i<ny;i++)printf("%c ",y[i]);printf("\\n");return 0;} 基本是对的!调试通过

c语言连接两个字符串的程序,为什么比如我输入abc 然后回车,再输入 d...
gets(a);、gets(b);中间的getchar();去掉吧,gets函数读入时以换行符或EOF为结束标志,并且换行符自动删除。所以getchar是没必要的。

C语言输入一个字符串 为什么遇到空格就输出了 为什么没有溢出
c语言在运行时不进行边界检查,你用scanf加参数%s来输入,它会读一个字符串进去(遇到回车等特殊字符就结束输入,并在最后补'\\0'),至于c是否能容纳这么多,这是由编程者自己来保证c的大小要足够的。所以你的c越界,只能说明是程序错误。这时候正好c[1]后面可以用,所以输出4个字符没有出问题,...

c语言编程中为什么我输入数按enter键后没有出结果屏幕直接就没有了
);scanf("%d%d",&x,&y);printf("x=%d,y=%d",x,y);fflush(stdin);\/\/这个是用来清空缓冲区中的用户输入的回车,防止影响getchar()if(x>y)printf("x=%d",x);if(y>x)printf("y=%d",y);if(x==y)printf("x==y %d:\\n",x);getchar();\/\/这是再加getchar()就OK了 } ...

C语言 输入一个三位数abc,输出bca
main(){ int n,a,b,c;scanf("%d",&n);a=n\/100;b=(n\/10)%10;c=n%10;printf("\\n倒序输出结果:%d%d%d",c,b,a);getch();} 三位数除以100那么商就是三位数的百位上数字,三位数除以10的商再除以10的余数就是三位数的十位上的数字,三位数除以10的余数就是三位数个位上的数字。

C语言 为什么我scanf接收3个字符但是运行的时候两个字符就输出了呢
int main(){ char a,b,c,x;scanf("%c%c%c",&a,&b,&c); \/*这个地方没有空格,所以在黑框里应该输入abc ,而不是a b c ,因为正像那位仁兄说的那样,空格和回车也是字符*\/ if(b<a)x=a,a=b,b=x;if(c

c语言 abc三个数最大值并显示,输入完回车就退出
printf("输入3个数字\\n");scanf("%d %d %d", &a, &b, &c);d = a;if (b > a);d = b;if (c > b);d = c;printf("d的值是%d\\n",d);return 0;} 我这样写的再我电脑可以运行 printf("d的值是%d\\n",&d);你的这一句有问题,你这个是把d的地址输出来了,最后那个return...

[C语言]求大神帮忙看看我这个程序的bug,关于颠倒输入字符顺序的_百度知 ...
例如你输入了abc回车 那么你的程序里s[0-2]分别是abc,然后i=3的时候,你读到了回车,跳出循环 然后i++使i=4,你把s[4]设为'\\0'。此时你就会发现s[3]你木有设过值。打印的时候从i-1也就是s[3]开始打印,所以有个奇怪的字符

相似回答