Salve a tutti, sono nuovo della pagina, mi sono iscritto alla facoltà d'informatica proprio quest anno, e se c'è qualcuno disponibile avrei bisogno di una mano per un programma che sto scrivendo (esercizio). Praticamente mi sono appena addentrato nel Makefile e per esercitarmi volevo scrivere un programma che prendesse in input dalla riga di comanda 3 file: input.txt, Oracle.txt, output.txt. In seguito, leggere un array di interi dal file di input, ordinarlo, e confrontarlo con il file Oracle (dove ho scritto la soluzione e l'output atteso). Mi funziona tutto perfettamente, anche il make, ma nel momento in cui voglio sapere se il file di input (ordinato) e il file Oracle coincidono ed è andato tutto bene, il test case mi ritorna 0 (gli array non sono uguali). Qualcuno ha dei consigli su dove ho sbagliato?
Questo è il main
#include <stdio.h>
#include <stdlib.h>
#include "array.h"
#define N 50
int main(int argc, char* argv[]) {
FILE *fp_input, *fp_oracle, *fp_output;
fp_input = fopen(argv[1], "r");
if (fp_input == NULL) {
fprintf(stderr, "Errore apertura del file input\n");
exit(EXIT_FAILURE);
}
fp_oracle = fopen(argv[2], "r");
if (fp_oracle == NULL) {
fprintf(stderr, "Errore apertura del file oracle\n");
exit(EXIT_FAILURE);
}
fp_output = fopen(argv[3], "w");
if (fp_output == NULL) {
fprintf(stderr, "Errore apertura del file output\n");
exit(EXIT_FAILURE);
}
char line[N];
int arr_input[N];
int arr_oracle[N];
int n_input;
int n_oracolo;
int test;
int i;
int n;
int m;
for (i=1; fgets(line, N, fp_input) != NULL; i++) {
n_input = input_array_str (arr_input, line);
fgets(line, N, fp_oracle);
n_oracolo = input_array_str (arr_oracle, line);
bubble_sort(arr_input, n_input);
test = compare_arrays(arr_input, arr_oracle, n_input, n_oracolo);
fprintf(fp_output, "Test case %d: %d\n", i, test);
}
fclose(fp_input);
fclose(fp_oracle);
fclose(fp_output);
return 0;
}
Questa invece è l'implementazione delle tre funzione che vedere all'interno
void bubble_sort(int a[], int n){
int i,j;
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
if(a[j]>a[j+1])
swap(&a[j],&a[j+1]);
}
int input_array_str(int a[], char b[]) {
int i;
for( i = 0; b[i] != '\n'; i++) {
a[i]=b[i];
}
return i;
}
int compare_arrays(int a[], int b[], int n, int m) {
int i;
if (n == m) {
for(i = 0; a[i] != '\n' && b[i] != '\n'; i++) {
if (a[i] != b[i])
break;
}
}
if (a[i] == b[i])
return 1;
else
return 0;
}
Grazie a chiunque si interesserà e scusate se magari ho sbagliato ad inserire il codice, ma devo ancora prenderci la mano con il forum.