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

    今天遇到一个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; 
}

运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值