PROBLEMA problema apertura file in c

hackthomas99

Nuovo Utente
2
0
Scheda Madre
Daviddix
RAM
Daviddix
Audio
Daviddix
PSU
Daviddix
Case
Daviddix
salve , ho realizzato questo programma ,però quando vado ad inserire il nome del file ovvero file.txt , questo non viene aperto , infatti il programma mi stampa "errore file", come posso risolvere ? grazie.

Ho inserito il codice nei tag CODE ed inoltre ho ottimizzato l algoritmo, tuttavia persiste il problema citato precedentemente.
Scusate se prima mi sono dimenticato di usare i tag..
Codice:
/*leggere nome file di testo,  acquisire nome cognome e media da file di testo,
*
*e stampare gli studenti in ordine crescente in base alla loro media*/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define DIM 50
#define LUN 15
#define SALT 1

void AcquisireFileDiTesto(FILE **fp,char nome[DIM],char Vett1[DIM][LUN],float Vett2[DIM]);
void CompattaVett1(char Vett1[DIM][LUN]);
void StampaInOrdineCrescenteDegliStudenti(char Vett1[DIM][LUN],float Vett2[DIM]);
int TrovaPosizioneMinimo(float Vett2[DIM]);

int main(){
    FILE *fp;
    char nome[DIM];
    char Vett1[DIM][LUN];
    float Vett2[DIM];

    printf("Inserisci il nome del file di testo (compreso di estensione) che vuoi aprire\n");
    scanf("%s",nome);

    AcquisireFileDiTesto(&fp,nome,Vett1,Vett2);
    CompattaVett1(Vett1);
    StampaInOrdineCrescenteDegliStudenti(Vett1,Vett2);

    system("pause");
    return 0;
}
void AcquisireFileDiTesto(FILE **fp,char nome[DIM],char Vett1[DIM][LUN],float Vett2[DIM]){
    char fine;
    int i = 0;
    int j = 0;
    *fp = fopen(nome,"r");

    if (*fp == NULL){
            printf("errore file");
        }

    while (fscanf(*fp,"%c",&fine) != '0' ) {
        fscanf(*fp,"%s %s %f\n",Vett1[i],Vett1[i+1],&Vett2[j]); //nome cognome media
        i = i + 1;
        j = j + 2;
    }

    fclose(*fp);

    Vett1[i][0] = '0';     //come posso inserire la stringa nel vettore manualmente? così ho inserito un carattere
    Vett2[i] = 0;
}
void CompattaVett1(char Vett1[DIM][LUN]){
    int i = 0;

    while(strcmp(Vett1[i],"0") != 0 ){
        strcat(Vett1[i],Vett1[i+1]);
        i = i + 2;
    }
    Vett1[i][0] = '0';      //come posso inserire la stringa nel vettore manualmente? così ho inserito un carattere
}
void StampaInOrdineCrescenteDegliStudenti(char Vett1[DIM][LUN],float Vett2[DIM]){
    int i = 0;
    int pos;


    while(strcmp(Vett1[i],"0") != 0 ){
        pos = TrovaPosizioneMinimo(Vett2);
        printf("%s   %f\n",Vett1[pos],Vett2[pos]);
        Vett2[pos] = SALT;
        i = i + 2;

    }

}
int TrovaPosizioneMinimo(float Vett2[DIM]){
    int i;
    int j = 0;
    int min = Vett2[j];


    while(Vett2[j] != 0){
        if (Vett2[j] < min && Vett2[j] != SALT){
            min = Vett2[j];
            i = j;
        }
        j = j + 2;
    }

    return i;
}
 
Ultima modifica:

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
Ciao, anzitutto quando si posta codice andrebbe messo nell'apposito tag CODE (selezionabile anche dal menù "inserisci" indicato da "..." accanto allo smile), possibilmente sistemando l'indentazione altrimenti diventa difficile da leggere.
Detto questo, il codice che hai postato non viene compilato, perché l'array bidimensionale vett1 viene trattato in più punti come se fosse monodimensionale. Inoltre, non si può riallocare un array statico, come tenti di fare nella procedura CancellaMinimoDaVett2, chiamando RiallocazioneVett2.
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Detto questo, il codice che hai postato non viene compilato, perché l'array bidimensionale vett1 viene trattato in più punti come se fosse monodimensionale. Inoltre, non si può riallocare un array statico, come tenti di fare nella procedura CancellaMinimoDaVett2, chiamando RiallocazioneVett2.

No è semplicemente [ i ] che viene trattato come italic. Ma la gente non vuole usare sto benedetto tag CODE…
 
  • Mi piace
Reazioni: BrutPitt e Mursey

BrutPitt

Utente Attivo
1,166
1,262
@Mursey ... hai fatto un gran cosa ad inserire il codice nel tag (e ad indentarlo)... solo che, come diceva giustamente @_Achille, tutti gli indici identificati con [ i ] sono stati definitivamente eliminati dal codice (sostituiti dalla formattazione italic)... per cui @hackthomas99 dovra' inserire nuovamente il suo codice: questo e' completamente inutile, ormai.
 
  • Mi piace
Reazioni: Mursey

Mursey

Super Moderatore
Staff Forum
Utente Èlite
8,191
5,631
@Mursey ... hai fatto un gran cosa ad inserire il codice nel tag (e ad indentarlo)... solo che, come diceva giustamente @_Achille, tutti gli indici identificati con [ i ] sono stati definitivamente eliminati dal codice (sostituiti dalla formattazione italic)... per cui @hackthomas99 dovra' inserire nuovamente il suo codice: questo e' completamente inutile, ormai.
Giusto :cav:
Ho annullato la modifica, @hackthomas99 sei pregato di inserire il codice usando il tag CODE.
 
  • Mi piace
Reazioni: BrutPitt

Andretti60

Utente Èlite
6,440
5,091
@hackthomas99 leggi la pagina del manuale per l’struzione fopen(), ti dice che ritorna zero se il file non esiste o se non hai i privilegi di lettura, in quel caso la variabile di sistema errno (definita nell’include <errno.h> ti dà maggiori informazioni sul tipo di errore.
Benvenuto nel forum :)
 
  • Mi piace
Reazioni: Mursey

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili