我如何更正此程序(Struct& pointer(?))?

时间:2014-10-08 01:17:54

标签: c pointers struct

你能帮我解决一下这段代码吗?

#include<stdio.h>
#include<string.h>

int main(){
    typedef struct{
        char NIM[11];
        char Nama[20];
        int mid;
        int final;
        int tugas;
        int absen;
        float nilaiakhir;
    }data;
    data datamahasiswa[10];
    int i;
    for (i=0;i<=1;i++){
        printf("Data Mahasiswa ke-%d\n",i);

        printf ("NIM :");
            scanf ("%s",&datamahasiswa[i].NIM);

        printf ("Nama :");
            scanf ("%s",&datamahasiswa[i].Nama);

        printf("Nilai Mid =");
            scanf("%d",&datamahasiswa[i].mid);

        printf("Nilai Final =");
            scanf("%d",&datamahasiswa[i].final);

        printf("Nilai Tugas =");
            scanf("%d",&datamahasiswa[i].tugas);

        printf("Jumlah absen =");
            scanf("%d",&datamahasiswa[i].absen);

        datamahasiswa[i].nilaiakhir=((10/100)*datamahasiswa[i].absen)+((25/100)*datamahasiswa[i].mid)+((35/100)*datamahasiswa[i].final)+((30/100)*datamahasiswa[i].tugas);
    }
    for (i=0;i<=1;i++){
        printf("Data Mahasiswa ke-%d\n",i);
        printf ("NIM : %s\n",datamahasiswa[i].NIM);
        printf ("Nama : %s\n",datamahasiswa[i].Nama);
        printf("Nilai Mid = %d\n",datamahasiswa[i].mid);
        printf("Nilai Final = %d\n",datamahasiswa[i].final);
        printf("Nilai Tugas = %d\n",datamahasiswa[i].tugas);
        printf("Jumlah absen = %d\n",datamahasiswa[i].absen);
        printf("Nilai Akhir = %f\n",datamahasiswa[i].nilaiakhir);
    }
    return 0;
}

我已经尝试过这个程序,最后它仍然在datamahasiswa [i] .nilaiakhir上返回0,不知何故我认为我必须使用指针,但我真的不知道如何使用指针和struct来制作这个程序权利,任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:1)

两个主要问题:

  • scanf ("%s",&datamahasiswa[i].NIM);scanf ("%s",&datamahasiswa[i].Nama);NIMNama成员是数组,这意味着他们已经指向其存储位置,因此您需要删除将地址运算符&传递给scanf()时(即scanf ("%s",datamahasiswa[i].NIM);scanf ("%s",datamahasiswa[i].Nama))。

  • 如果希望小数结果形成除法运算符/,则至少有一个操作数必须是浮点类型。使用类似(double) 10 / 10010. / 100.的内容(请注意小数点)。