C 为什么此代码没有';不打印一些值吗?
我不明白为什么当我试图用C 为什么此代码没有';不打印一些值吗?,c,C,我不明白为什么当我试图用stampa函数打印archivio[]中的值时,这个程序会打印 “studente”、“matricola”、“nome”、“cognome” 正确,但不打印stampaEsami中的值 #include <stdio.h> #include <stdlib.h> #define MAXSTUDENTI 20 #define MAXSTRINGA 100 #define MAXESAMI 25 /* run this program using
stampa
函数打印archivio[]
中的值时,这个程序会打印
“studente”、“matricola”、“nome”、“cognome”
正确,但不打印stampaEsami
中的值
#include <stdio.h>
#include <stdlib.h>
#define MAXSTUDENTI 20
#define MAXSTRINGA 100
#define MAXESAMI 25
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef char Stringa[MAXSTRINGA];
typedef enum { uno, due, tre, FC
} AnnoCorso;
typedef struct {
Stringa nomeEsame;
int voto;
} Esame;
typedef struct {
Esame listaEsami[MAXESAMI];
int numeroEsami;
}ListaEsame;
typedef struct {
int matricola;
Stringa nome;
Stringa cognome;
AnnoCorso anno;
ListaEsame esami;
} Studente;
void init(Studente[], int);
void acquisisciEsami(Studente, int);
void stampa(Studente[], int);
void stampaEsami(ListaEsame);
void init(Studente archivio[], int n){
int i;
int nEsami;
for(i = 0; i < n; i++){
printf("Studente n. %d\n", i+1);
printf("Inserire matricola: ");
scanf("%d", &archivio[i].matricola);
printf("Inserire nome: ");
scanf("%s", &archivio[i].nome);
printf("Inserire cognome: ");
scanf("%s", &archivio[i].cognome);
printf("Inserire il numero di esami svolti: ");
scanf("%d", &archivio[i].esami.numeroEsami);
nEsami = archivio[i].esami.numeroEsami;
if(nEsami != 0) {
acquisisciEsami(archivio[i], nEsami);
}
}
}
void acquisisciEsami(Studente studente, int n){
int i;
for(i = 0; i < n; i++) {
printf("Inserire nome esame:");
scanf("%s", studente.esami.listaEsami[i].nomeEsame);
printf("Inserire voto esame:");
scanf("%d", &studente.esami.listaEsami[i].voto);
}
}
void stampa(Studente archivio[], int n){
printf("\nGli studenti presenti in archivio sono:\n");
int i;
for(i = 0; i < n; i++){
printf("Studente n. %d:\n", i+1);
printf("Matricola: %d\n", archivio[i].matricola);
printf("Nome: %s\n", archivio[i].nome);
printf("Cognome: %s\n", archivio[i].cognome);
stampaEsami(archivio[i].esami);
}
}
void stampaEsami(ListaEsame esami){
int i = 0;
int n = esami.numeroEsami;
for(i = 0; i < n; i++){
printf("Nome esame: %s\n", esami.listaEsami[i].nomeEsame );
printf("Voto esame: %d\n", esami.listaEsami[i].voto);
}
}
int main(int argc, char *argv[]) {
Studente studenti[MAXSTUDENTI] ;
int n;
printf("Inserire il numero di studenti da memorizzare in archivio:\n ");
scanf("%d", &n);
init(studenti, n);
stampa(studenti, n);
return 0;
}
它打印:
Gli studenti presenti in archivio sono:
Studente n.1:
Matricola: 13434
Nome : test
Cognome: test
Nome esame:
Voto esame: 0
您的问题是
acquisisciEsami
函数
它应该接受Studente*
,而不是通过值传递的变量
void acquisisciEsami(Studente *studente, int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("Inserire nome esame:");
scanf("%s", studente->esami.listaEsami[i].nomeEsame);
printf("Inserire voto esame:");
scanf("%d", &studente->esami.listaEsami[i].voto);
}
}
正如我所评论的,您有问题需要解决:
scanf(“%s”,&archivio[i].nome)代码>必须是
scanf(“%s”,archivio[i].nome)代码>
- scanf(“%s”和&archivio[i].cognome)代码>应该是
scanf(“%s”,archivio[i].cognome)代码>
scanf(“%s”,&archivio[i].nome)代码>-->scanf(“%s”,archivio[i].nome)
对于cognome
成员也是这样。
void acquisisciEsami(Studente *studente, int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("Inserire nome esame:");
scanf("%s", studente->esami.listaEsami[i].nomeEsame);
printf("Inserire voto esame:");
scanf("%d", &studente->esami.listaEsami[i].voto);
}
}
acquisisciEsami(&archivio[i], nEsami);