今天遇到一个scanf格式化输入的问题,之前还没意识到.当连续输入不同类型的数据时,如scanf("%d%c%s%d",&a,&b,c,&d);(其中c为char型数组,不需要取地址),输出结果不符合预期猜想.
问题代码:
#include<stdio.h>
struct student
{
int a;
char b[20];
char c;
int d;
}st;
int main()
{
scanf("%d%s%c%d",&st.a,st.b,&st.c,&st.d);
printf("a=%d \nb=%s \nc=%c \nd=%d\n",st.a,st.b,st.c,st.d);
putchar('\n');
return 0;
}
思考:
scanf函数输入多个数据时最好使用空格做下间隔,这样方便区分.但是在使用scanf输入字符串时,空格会被默认为字符串之间的分隔符,最终输入到字符串中的只有空格前的数据.同样scanf函数在遇到不按指定格式输入时会自动结束.
更正代码:
#include<stdio.h>
struct student
{
int a;
char b[20];
char c;
int d;
}st;
int main()
{
scanf("%d %s %c %d",&st.a,st.b,&st.c,&st.d);
printf("n = %d\n", n);
printf("a=%d \nb=%s \nc=%c \nd=%d \n",st.a,st.b,st.c,st.d);
putchar(10);
return 0;
}