你能帮我解决一下这段代码吗?
#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来制作这个程序权利,任何人都可以提供帮助吗?
答案 0 :(得分:1)
两个主要问题:
scanf ("%s",&datamahasiswa[i].NIM);
和scanf ("%s",&datamahasiswa[i].Nama);
:NIM
和Nama
成员是数组,这意味着他们已经指向其存储位置,因此您需要删除将地址运算符&
传递给scanf()
时(即scanf ("%s",datamahasiswa[i].NIM);
和scanf ("%s",datamahasiswa[i].Nama)
)。
如果希望小数结果形成除法运算符/
,则至少有一个操作数必须是浮点类型。使用类似(double) 10 / 100
或10. / 100.
的内容(请注意小数点)。