哪位高手帮看看这段C程序第五行为什么会多余的输出来?
#include"stdio.h"
void main()
{
int fun(char w[],char a);
char a,arr[100];
printf("输入字符串:\n");
gets(arr);
while(1)
{
printf("输入查找的字符:");
scanf("%c",&a);
if(fun(arr,a)==0)
printf("不存在\n");
else printf("在第%d个位置\n",fun(arr,a));
}
}
int fun(char w[],char a)
{
for(int i=0;w[i]!='\0';i++)
if(a==w[i])
{
return(i+1);
break;
}
if(w[i]=='\0')
return(0);
}
[解决办法]
问题出在 scanf("%c",&a); 语句上,它只读取一个字符,但在输入缓冲区里留下了其它内容如回车等,循环处理时第二次直接读到一个回车号,结果就有“不存在\n”被输出了
两个办法处理,一个是在读取一个字符后清空输入缓冲区:fflush(stdin);
另一个办法是改个输入函数getch(),不用等回车,每个字符直接响应,如 添加:
#include <conio.h>
......
c = getch();putchar(c);
替换掉 scanf("%c",&a); 函数getch()收到输入的一个字符就直接返回了,不等回车号的,也不回显于控制台,为了回显用了putchar(c);