Lazzaro21
Nuovo Utente
- Messaggi
- 1
- Reazioni
- 0
- Punteggio
- 2
Salve,
stavo provando ad eseguire un progetto in C che utilizza l'apertura di vari file,ho provato a farmi aiutare anche dall'AI e a quanto pare il problema riguarda l'apertura di un file, precisamente:
C:\Users\User\Desktop>programma run_test_ordina_array test_suite.txt results.txt
Apro il file di test suite: p\test_suite.txt
Apro il file di risultati: C:\Users\User\Desktop\test_suite.txt
Errore in apertura dei file: No such file or directory
Sembra che non riesca ad aprirmi il primo file, lascio di seguito anche il programma in c:
run test ordina array:
vettore.c:
utile.c:
stavo provando ad eseguire un progetto in C che utilizza l'apertura di vari file,ho provato a farmi aiutare anche dall'AI e a quanto pare il problema riguarda l'apertura di un file, precisamente:
C:\Users\User\Desktop>programma run_test_ordina_array test_suite.txt results.txt
Apro il file di test suite: p\test_suite.txt
Apro il file di risultati: C:\Users\User\Desktop\test_suite.txt
Errore in apertura dei file: No such file or directory
Sembra che non riesca ad aprirmi il primo file, lascio di seguito anche il programma in c:
run test ordina array:
C:
#include <stdio.h>
#include <stdlib.h>
#include "vettore.h"
#define M 20
int run_test_case(char *tc_id, int n) {
char input_fname[M], output_fname[M], oracle_fname[M];
// Costruiamo i nomi dei file
sprintf(input_fname, "%s_input.txt", tc_id);
sprintf(output_fname, "%s_output.txt", tc_id);
sprintf(oracle_fname, "%s_oracle.txt", tc_id);
// Controllo dell'esistenza del file di input
FILE *input_file = fopen(input_fname, "r");
if (input_file == NULL) {
printf("Errore: file di input %s non trovato.\n", input_fname);
return 0; // o un altro valore che indica errore
}
fclose(input_file); // Chiudiamo il file dopo il controllo
// Controllo dell'esistenza del file oracle
FILE *oracle_file = fopen(oracle_fname, "r");
if (oracle_file == NULL) {
printf("Errore: file oracle %s non trovato.\n", oracle_fname);
return 0; // o un altro valore che indica errore
}
fclose(oracle_file); // Chiudiamo il file dopo il controllo
// Allochiamo memoria per array di input
int *input = (int*)malloc(sizeof(int) * n);
if (!input) {
printf("Errore allocazione memoria array.");
exit(1);
}
// Carica file di input
finput_array(input_fname, input, n);
// Ordina array
ordina_array(input, n);
// Scrive file di output
foutput_array(output_fname, input, n);
// Allochiamo memoria per array oracolo
int *oracolo = (int*)malloc(sizeof(int) * n);
if (!oracolo) {
printf("Errore allocazione memoria oracolo.");
exit(1);
}
// Carichiamo oracolo
finput_array(oracle_fname, oracolo, n);
// Confrontiamo array
int result = confronta_array(oracolo, input, n);
// Liberiamo la memoria allocata
free(input);
free(oracolo);
return result;
}
int main(int argc, char *argv[]) {
if (argc < 3) {
printf("Nomi dei file mancanti \n");
exit(1);
}
printf("Nome del file di test suite: %s\n", argv[1]);
printf("Nome del file di risultati: %s\n", argv[2]);
FILE *test_suite, *result;
char tc_id[M]; // Stringa contenente l'identificativo del test case
int n, pass;
// Apro file contenente test suite
test_suite = fopen(argv[1], "r");
// Apro file contenente risultati test
result = fopen(argv[2], "w");
if (test_suite == NULL || result == NULL) {
perror("Errore in apertura dei file");
exit(1);
}
// Scansione del file di input nel ciclo while.
// Ad ogni iterazione si leggono i due elementi di una riga:
// l'identificativo del test case tc_id e il numero n di elementi da ordinare
while (fscanf(test_suite, "%s%d", tc_id, &n) == 2) {
pass = run_test_case(tc_id, n);
fprintf(result, "%s ", tc_id);
if (pass == 1)
fprintf(result, "PASS \n");
else
fprintf(result, "FAIL \n");
}
fclose(test_suite); // Chiusura file di input
fclose(result); // Chiusura file di output
return 0;
}
vettore.c:
C:
// FILE: vettore.c
// restituisce 1 se i due vettori di ingresso sono uguali, 0 altrimenti
#include "vettore.h"
#include <stdio.h>
#include <stdlib.h>
#include "utile.h"
int confronta_array(int a[], int b[], int n)
{
int v=1;
for(int i=0;i<n;i++){
if(a[i]!=b[i]) {
v=0;
break;
}
}
return v;
}
void foutput_array(char *file_name, int a[], int n)
{
int i;
FILE *fd;
//aprire il file in scrittura
fd=fopen(file_name, "w");
//controllare che il file sia stato aperto correttamente
//e scrivere il contenuto (fprintf()) di a in fd
if (fd==NULL) {
printf("Errore apertura file in vettore.c\n");
return;
}
for(i=0;i<n;i++){
fprintf(fd,"%d\n",a[i]);
}
// chiudere il file
fclose(fd);
}
void finput_array(char *file_name, int a[], int n)
{
int i;
FILE *fd;
//apertura file in lettura
fd=fopen(file_name, "r");
//Controllare se il file esiste e
//leggere il contenuto (fscanf()) da scrivere in array a
if (fd==NULL) {
printf("Errore apertura file in vettore.c \n");
return;
}
for(i=0;i<n;i++){
fscanf(fd,"%d",&a[i]);
}
//chiudere il file
fclose(fd);
}
void ordina_array(int a[], int n)
{
// Implementazione algoritmo di ordinamento bubble sort
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (a[j] > a[j + 1])
{
scambia(&a[j], &a[j + 1]); // Passiamo i puntatori per scambiare gli elementi
}
}
}
}
utile.c:
C:
// Implementazione del Modulo: file utile.c
void scambia(int *x, int *y)
{
int temp=*y;
*y=*x;
*x=temp;
}
Allegati
Ultima modifica: