scanf() 可输入不包含空格的字符串,不读取回车,空格和回车表示输入完毕。
getchar() 只能读取用户输入缓存区的一个字符,包括回车。
例:
#include <stdio.h> int main(){ char a[100]; printf("请输入: "); scanf("%s",&a); printf("字符的值为: "); printf("请输入: "); printf("%c",getchar()); printf("%c",getchar()); printf("%c",getchar()); return 0; }
编译运行:
请输入:123 字符的值为:123 请输入: 12 12
在这里,第一个 getchar() 读取了上次 scanf() 的回车,体现在第二个“请输入”后出现了换行,第二、三个 getchar分别 读取 1 和 2,因此 3 没有读取出来。
要避免这种情况,就要在 getchar 前清空缓存区中的回车,可以用 C 语言的基本语法:
char c_tmp; while ((c_tmp!='\n')&&c_tmp!='EOF');
也可以用 fflush(stdin) 清空缓存区。
代码完善为:
#include <stdio.h> int main(){ char a[100]; printf("请输入: "); scanf("%s",&a); printf("字符的值为: "); //fflush(stdin); char c_tmp; while ((c_tmp!='\n')&&c_tmp!='EOF'); printf("请输入: "); printf("%c",getchar()); printf("%c",getchar()); printf("%c",getchar()); return 0; }
输出:
请输入:123 字符的值为:123 请输入:123 123