c - 我如何更正这个程序(结构和指针(?))?

标签 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,不知怎的,我认为我必须使用指针,但我真的不知道如何使用带有结构的指针来使这个程序正确,有人可以帮忙吗?

最佳答案

两个主要问题:

  • 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。(注意小数点)。

关于c - 我如何更正这个程序(结构和指针(?))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26247779/

相关文章:

c 宏,不带引号的标记粘贴

c - int **foo[][]() 中的 foo 是什么

c++ - 动态访问结构体内部的变量 C++

c++ - 这会超出范围并且无法正常运行吗?

c++ - 是否有可能在没有得到 "new"ed 的结构中有一个 boost::variant?

c - IP头的分解

c - C 中的文件 IO 和字符串意外值

java - Java能不能像C一样直接打开设备文件节点?

c - 如何释放C中的内存

c - 内存泄漏检测