Jay_2002 2021-12-19 15:52 采纳率: 100%
浏览 25
已结题

%与ld之间加了空格会出问题是为何?

问题遇到的现象和发生背景

用codeblock或dev写出的苏小红C语言程序设计12.5末的代码,在第37行代码%与ld之间加了空格,会导致跳过后续的scanf到下一个循环

问题相关代码,请勿粘贴截图
#include <stdio.h> 
#define N 30
#define M 4
typedef struct date{
    int year;
    int month;
    int day;
}DATE;
typedef struct student{
    long studentID;
    char studentName[10];
    char studentSex;
    DATE birthday;
    int score[M];
}STUDENT;
void InputScore(STUDENT stu[ ],int n,int m);
void AverScore(STUDENT stu[ ],float aver[ ],int n,int m);
void PrintScore(STUDENT stu[ ],float aver [ ],int n,int m);
int main()
{
    float aver[N];
    STUDENT stu[N];
    int n;
    printf("How many student?");
    scanf("%d",&n); 
    InputScore(stu,n,M);
    AverScore(stu,aver,n,M);
    PrintScore(stu,aver,n,M);
    return 0;
}
void InputScore(STUDENT stu[ ],int n,int m)
{
    int i,j;
    for (i=0;i<n;i++)
    {
        printf("Input record %d:\n",i+1);
        scanf("%ld",&stu[i].studentID);//**%与ld之间有空格会导致输入学号和姓名后跳过后面的输入 **
        scanf("%s",stu[i].studentName);
        scanf(" %c",&stu[i].studentSex);
        scanf("%d",&stu[i].birthday.year);
        scanf("%d",&stu[i].birthday.month);
        scanf("%d",&stu[i].birthday.day);
        for (j=0;j<m;j++)
        {
            scanf("%d",&stu[i].score[j]);
        }
    }
}
void AverScore(STUDENT stu[ ],float aver[ ],int n,int m)
{
    int i,j,sum[N];
    for (i=0;i<n;i++)
    {
        sum[i]=0;
        for(j=0;j<m;j++)
        {
            sum[i]=sum[i]+stu[i].score[j];
        }
        aver[i]=(float)sum[i]/m;
    }
}
void PrintScore(STUDENT stu[ ],float aver[ ],int n,int m)
{
    int i,j;
    printf("Results:\n");
    for (i=0;i<n;i++)
    {
        printf("%ld%8s%3c%6d/%02d/%02d",stu[i].studentID,
                                        stu[i].studentName,
                                        stu[i].studentSex,
                                        stu[i].birthday.year,
                                        stu[i].birthday.month,
                                        stu[i].birthday.day);
        for (j=0;j<m;j++)
        {
            printf("%4d",stu[i].score[j]);
        }
        printf("%6.1f\n",aver[i]);
    }
}

运行结果及报错内容

运行没问题,无报错,但是输入了第二个scanf后,后续的scanf会跳过

我的解答思路和尝试过的方法

删除%与ld之间的空格就好了,但不知道为什么

我想要达到的结果:所以%与ld之间加了空格会怎么样?
  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2021-12-19 15:55
    关注

    占位符的语法就是%lf之间没有空格,如果有空格,那就会导致输入不正常,至于会出现什么问题,不确定的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月23日
  • 已采纳回答 1月15日
  • 创建了问题 12月19日

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用