Fehler: - Ausdruck muss struct-oder union-Typ in c
Ich habe einen code zum speichern von Namen und Noten der Studierenden, dann erinnern Sie die Klasse, als die Schüler die Namen eingetragen sind.
Hier ist mein code:
#include <stdio.h>
#define N 10
#define M 2
struct a
{
char name[50];
int grade;
};
int main()
{
int i;
int j;
struct a A[N][M];
for(i=0;i<N;i++)
{
printf("Please Enter Students' Names:/n");
scanf("%s", &A[i].name);
}
for(j=0;j<M;j++)
{
printf("Please Enter Students' Grades:/n");
scanf("%d", &A[j].grade);
}
printf("Which Student's Grades Would You Like To View?/n");
if(scanf("%s", *A[i].name))
{
printf("Their Grade Is:%d/n", *A[j].grade);
}
return 0;
}
Ich habe immer diesen Fehler:
hw2problem2.c(21): error: expression must have struct or union type
scanf("%s", &A[i].name);
^
hw2problem2.c(26): error: expression must have struct or union type
scanf("%d", &A[j].grade);
^
hw2problem2.c(29): error: expression must have struct or union type
if(scanf("%s", *A[i].name))
^
hw2problem2.c(31): error: expression must have struct or union type
printf("Their Grade Is:%d/n", *A[j].grade);
^
compilation aborted for hw2problem2.c (code 2)
Jede Hilfe bei der Fehler oder das Programm im Allgemeinen würde geschätzt werden.
Danke.
Warum ein 2D-array?
InformationsquelleAutor proflavahot | 2014-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen angegebenen
struct a A
als ein zwei-dimensionales array, und nur die angegebeneneine dimension, in
scanf("%s", &A[i].name);
undscanf("%d", &A[j].grade);
.Haben Sie ein paar andere Probleme, wie
scanf("%s", &A[i].name);
... wo die&
ist unnötig.InformationsquelleAutor TonyB
Ihr Programm sollte wie folgt sein
Weil
A[i]
ist der Typstruct a*
, nichtstruct a
. Es sollte Ein[i][j]Logisch, das array sollte 1-D. Daher Schleife sollte wie:
Wenn Sie unterliegen klug ist, dann sollte es 2D und verschachtelte Schleife, wie gezeigt.
InformationsquelleAutor doptimusprime
Nicht zu benutzen brauchen
2D
array. Dies einfach mal probieren..A[i].name
ist mehr als 10 Zeichen und diesname
gesucht, mit der gleichen, führen zu Stack-Smashing, da die Größe dersname
ist 10 und Sie wäre Scannen mehr als Wert, Siehe Hier . Auchunused variable j
.im Allgemeinen nicht eine gute Idee, mit scanf und %s zusammen, einfach zu bekommen Pufferüberlauf. besser fgets/sscanf
InformationsquelleAutor Anbu.Sankar