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);