仅在第一行[C]

我正在编写一个程序,该程序将从每个候选人的用户名和答案中获取输入,并按如下所示将它们打印在.csv文件中:

name,answer A,answer B,...,answer Z.

每个名称都存储在名为nome_cognome的矩阵中;
每个答案都存储在名为matrice_risposte的矩阵中;

出于某种原因,我忽略了该程序,仅对第一个候选者的最后一个(“ Z”问题)打印错误答案。其他任何候选人都正确报告了所有答案。

我试图做的事情: 我在不了解问题背后原因的情况下调试了5天的程序。我在网上搜索了类似的问题,我试图修改代码,但无法解决。 如果找不到任何解决方案,我通常会在论坛上写下最后的机会。

我让用户检查插入的答案是否正确,然后再继续下一个答案。在屏幕上打印答案时,将正确报告它们。在文件上打印时,会按照说明进行操作。

以下图片清楚地显示了我在说什么

仅在第一行[C]

我为Paul输入的所有答案均为1,而对于marie,我输入的所有答案均为2。

代码显示了程序在csv文件(已创建)上写入的部分。

FILE *file_risultati; //apertura file di testo
strcat(corso,".csv");
file_risultati=fopen(corso,"w");

for (j=0;j<iscritti;j++){

    p=0;
    while(nome_cognome[j][p]!='\n')
    {
    fprintf(file_risultati,"%c",nome_cognome[j][p]);
    p=p+1;
    }
    fprintf(file_risultati,",");


    for(i=0; i<22; i++)
    {
        fprintf(file_risultati,"%d,matrice_risposte[j][i]);
    }
    if(j != (iscritti-1)){
        fprintf(file_risultati,"\n");
    }
}
    fclose(file_risultati); //chiusura file di testo

以下代码是完整的程序,因此您可以检查所有内容并验证我的意思。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char corso[100];
char acquisizione_nome [40];
char domande[]= "ABCDEFGHIJLMNOPQRSTUVZ";
int iscritti;
int risposta;

int i;
int j;
int k=1;
int p;

// variabili variazione risposta

int modifica_risposta = 1;
int risposta_precedente;
char risposta_modificata;
char domande_min[]="abcdefghijlmnopqrstuvz";

int main()
{
    printf("Program written by Gianluca Gregnol\n\n");
    printf("Raccolta del fabbisogno formativo\n\n");
    printf("Digitare il corso di interesse: ");
    gets(corso);
    printf("Digitare numero di iscritti al corso: ");
    scanf("%d",&iscritti);

    char nome_cognome[iscritti][40];
    int matrice_risposte[iscritti][21];

    // processo di inserimento votazioni //
    for (k=0;k <(iscritti);k++)
    {
        printf("\n iscritto ");
        printf("%d \n\n",k+1);
        printf("nome e cognome: ");
        fflush(stdin);
        fgets(acquisizione_nome,40,stdin);

        for (i=0; i<40; i++)
        {
            nome_cognome[k][i]= acquisizione_nome[i];
        }

        for (i=0; i<22; i++)
        {
            printf("\nvoto della domanda ");
            printf("%c: ",domande[i]);
            scanf("%d",&risposta);

            while (risposta<0 || risposta>3)
            {
                printf("\n VOTO NON VALIDO!\n i voti validi sono: 0,1,2,3\n inserire nuovamente il voto per la domanda ");
                printf("%c:",domande[i]);
                fflush(stdin);
                scanf("%d",&risposta);
            }
            matrice_risposte[k][i]=risposta;

        }

//stampa le risposte attuali per permetterne il controllo
        printf("\nLe risposte attualmente inserite sono: \n");

        for (i=0; i<22; i++)
        {
            printf("%c  ",domande[i]);
        }
        printf("\n");

        for (i=0; i<22; i++)
        {
            printf("%d  ",matrice_risposte[k][i]);
        }

        printf("\nDesideri modificare delle risposte? \n No = 0 \n Si = 1 \n");
        printf("Risposta: ");
        fflush(stdin);
        scanf("%d",&modifica_risposta);


// controlla se l'utente vuole cambiare delle risposte
        while(modifica_risposta == 1){

            printf("\n\nQuale risposta vuoi modificare?\n");
            printf("Risposta: ");
            fflush(stdin);
            scanf("%c",&risposta_modificata);

            for(i=0; i<22; i++){

                if(risposta_modificata == domande_min[i] || risposta_modificata == domande[i]){

                printf("\nIndica il nuovo valore della domanda %c: ",&risposta);
                while (risposta < 0 || risposta > 3)
                {
                    printf("\n VOTO NON VALIDO!\n i voti validi sono: 0,3\n inserire nuovamente il voto per la domanda ");
                    printf("%c:",domande[i]);
                    fflush(stdin);
                    scanf("%d",&risposta);
                }
                risposta_precedente = matrice_risposte[k][i] ;
                matrice_risposte[k][i] = risposta;

                printf(" -- Risposta modificata correttamente --\n\n");

                }
            }

            printf("\nDesideri modificare delle risposte? \n No = 0 \n Si = 1 \n");
            printf("Risposta: ");
            fflush(stdin);
            scanf("%d",&modifica_risposta);


        } //main  while

    }

// processo scrittura su file

    FILE *file_risultati; //apertura file di testo
    strcat(corso,".csv");
    file_risultati=fopen(corso,"w");

    for (j=0;j<iscritti;j++){

        p=0;
        while(nome_cognome[j][p]!='\n')
        {
        fprintf(file_risultati,nome_cognome[j][p]);
        p=p+1;
        }
        fprintf(file_risultati,");


        for(i=0; i<22; i++)
        {
            fprintf(file_risultati,matrice_risposte[j][i]);
        }
        if(j != (iscritti-1)){
            fprintf(file_risultati,"\n");
        }
    }
        fclose(file_risultati); //chiusura file di testo

        return 0;
}
hhuomjk08 回答:仅在第一行[C]

简短答案:

第32行:

int matrice_risposte[iscritti][21];

21更改为22

说明:

我(从附图中)注意到您有22个问题,但声明了21个元素的数组。在大多数语言中,多维数组是通过序列化实现的。因此,matrice_risposte [1] [22]实际上是matrice_risposte [2] [0]。您没有注意到该错误,因为您首先打印结果,然后用下一轮输入覆盖最后一个结果。

本文链接:https://www.f2er.com/3144653.html

大家都在问