1.相对于scanf,gets函数不仅代码更简洁,还能输入空格,值得一提的是,在最后敲出来的换行符会从缓冲区中取出,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着如果前面使用过gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了。
例如:
#include <stdio.h>
int main(void)
{
char str[30];
char ch;
printf("请输入字符串:");
gets(str);
printf("%s\n", str);
scanf("%c", &ch);
printf("ch = %c\n", ch);
return 0;
}
运行结果:
2.如果把gets()改称scanf:
#include <stdio.h>
int main(void)
{
char str[30];
char ch;
printf("请输入字符串:");
scanf("%s",str);
printf("%s\n", str);
scanf("%c", &ch);
printf("ch = %c\n", ch);
return 0;
}
输入的字符串不能含有空格
运行结果:
这时,我们将在scanf输入回车后,这个回车无法被消掉,于是当下一个scanf遇到时,直接被回车处理掉了,所以我们得加入getchar()来清空缓存区(消除回车)。
代码:
#include <stdio.h>
int main(void)
{
char str[30];
char ch;
printf("请输入字符串:");
scanf("%s",str);
printf("%s\n", str);
getchar();
scanf("%c", &ch);
printf("ch = %c\n", ch);
return 0;
}
运行结果:
这样数据就能正常输入了,美中不足的就是不能输入空格。