1. 输入字符串
#include<stdio.h>
int main() {
int a;
char s1[100];
char s2[100];
scanf("%d", &a);
scanf("%s", s1);
scanf("%s", s2);
printf("a = %d\n", a);
printf("s1 = %s\n", s1);
printf("s2 = %s\n", s2);
return 0;
}
输入
2019
hello
world
输出
a = 2019
s1 = hello
s2 = world
没有问题,因为scanf("%s")遇到换行符会自动跳过
2.输入字符
#include<stdio.h>
int main() {
int a;
char s1;
char s2;
scanf("%d", &a);
scanf("%c", &s1);
scanf("%c", &s2);
printf("a = %d\n", a);
printf("s1 = %c\n", s1);
printf("s2 = %c\n", s2);
return 0;
}
输入
2019
A
B
输出
a = 2019
s1 =
s2 = A
可以看到s1将2019后面的回车符'\n'
吸收了,原因是scanf("%c")在读取单个字符时,空格和回车都被视为单个字符。
解决办法
使用getchar()吸收掉多余的回车
#include<stdio.h>
int main() {
int a;
char s1;
char s2;
scanf("%d", &a);
getchar(); // 吸收"\n"
scanf("%c", &s1);
getchar(); // 吸收"\n"
scanf("%c", &s2);
printf("a = %d\n", a);
printf("s1 = %c\n", s1);
printf("s2 = %c\n", s2);
return 0;
}
在格式串中过滤掉回车
#include<stdio.h>
int main() {
int a;
char s1;
char s2;
scanf("%d\n", &a); // 过滤掉回车
scanf("%c\n", &s1);
scanf("%c", &s2);
printf("a = %d\n", a);
printf("s1 = %c\n", s1);
printf("s2 = %c\n", s2);
return 0;
}