您的位置:首页 > 编程语言 > C语言/C++

关于scanf格式化输入函数的小问题

2017-08-28 23:43 246 查看
今天遇到一个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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息