Я пишу программу, которая принимает в качестве входных данных имена пользователей и ответы, связанные с каждым кандидатом, и печатаю их в файле .csv следующим образом:
name, answer A, answer B,..., answer Z.
каждое имяхранится в матрице с именем nome_cognome
;
каждый ответ сохраняется в матрице с именем matrice_risposte
;
По какой-то причине, которую я игнорирую, программа печатает неправильный ответ только для последнего из первых кандидатов (вопрос "Z"). У любого другого кандидата все ответы указаны правильно.
что я пытался сделать: я отлаживал программу в течение 5 дней, не понимая причину проблемы. Я искал в Интернете похожие проблемы, пытался изменить код, но не могу решить. Я обычно пишу на форумах как последний шанс, если не могу найти какое-либо решение.
Я проверяю правильность введенных ответов для каждого кандидата перед тем, как перейти к следующему. При печати ответов на экране они сообщаются правильно. При печати на файле это происходит как описано.
Следующее изображение ясно показывает, о чем я говорю
Я набрал для Павла все ответы как 1, а для Мари я набрал все ответы как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: ", domande[i]);
fflush(stdin);
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);
}
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,"%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
return 0;
}