C语言中结构体数组用 for循环和 scanf 输入 比应输入行数多一行

C语言中 结构体数组用 for循环和scanf输入 比应输入行数多一行,这是为什么?

3组学生信息的输入,成绩汇总,排序,打印

我只想输3组数据(aa,bb,cc),但必须输4行(多了dd,这行是随便输的)才行,,不懂,求解。
结果和代码如下:
图片说明

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
typedef struct {
    char name[9];
    float score[2];
    float total;
} stu;

void shuru(stu*ss){
    int i=0;
    for(;i<N;i++){
        scanf("%s%f%f\n",(ss+i)->name,&((ss+i)->score[0]),&((ss+i)->score[1]));
    }
}

void shuchu(stu* ss){
    int i=0;
for(;i<N;i++)
        printf("%s %f %f %f\n",(ss+i)->name,(ss+i)->score[0],(ss+i)->score[1],(ss+i)->total); 
}


void paixv(stu *ss){
    int i,j=0;
       for(i=0;i<N-1;i++){
    for(j=0;j<N-i-1;j++){
        if(ss[j].total<=ss[j+1].total){
            stu temp=ss[j];
            ss[j]=ss[j+1];
            ss[j+1]=temp;
        }
    }
   }
}

void huizong(stu* ss){
    int i=0;
    for(;i<N;i++){
            (ss+i)->total=(ss+i)->score[0]+(ss+i)->score[1];
            ss[i].total=ss[i].score[0]+ss[i].score[1];
    }}

int main()
{
     stu  ss[N];
     int i,j=0;

     shuru(ss);
   huizong(ss);
   paixv(ss);
   shuchu(ss);

     return 0;
}

2个回答

您好,输入的方法里去掉【\n】就好了

图片说明

如果我的回答对您有所帮助,请您采纳,谢谢~~

直接按回车键,输入完cc后直接按回车键。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问