#include<stdio.h>
int main()
{
char string_c[20],*c;
printf("input string:\n");
scanf("%c",string_c);
printf("input a char:\n");
scanf("%c",c);
pritnf("%s %c",string_c,*c);
return 0;
}
比如上面这种情况会发生错误,当程序运行会发生当输入字符串之后,不需要输入第二次的字符,它直接出结果。其实是第一次输入字符串之后回车,最后'\n'没有给String_c,而是保存在缓存中,当第二次需要输入时,直接把缓存中的字符赋值。
解决方法:
(1)将两个scanf()函数写为一个sancf("%s %c",striing_c,c);
(2)在第一个scanf()函数下面写清空缓存操作:fflush(stdin)刷新标准输入缓冲区
(3)在第一scanf()函数加入 getchar() ,将'\n'直接取出,让它不在起作用
(4)在一个scanf()函数这么写:scanf("%c\n",string_c)

本文探讨了C语言中使用scanf函数输入字符串时常见的错误,即第二次输入字符时不需要再次输入,导致程序行为不符合预期。文章详细分析了这一现象的原因,并提供了四种解决方案,包括修改scanf调用方式、使用fflush清理输入缓冲区、利用getchar函数消费残留换行符以及调整scanf格式字符串。
5151





