Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    come acquisira il nome di un file da tastiera in C?

    Ciao a tutti! questo e' il mio primo post e scusate se uso l'apostrofo invece degli accenti ma avendo la tastiera amaricana non li ho! Cmq adesso vi spiego il mio problema: ho gia' guardato sul forum ed ho trovato una domanda simile alla quale avete gia' risposto, ma la mia situazione e' un poco diversa. Infatti devo scrivere un programma nel quale devo creare una funzione generica, che verra' chiamata dal main, che serve ad aprire un file (in cui ho i dati relativi ad una matrice) il cui nome lo devo introdurre da tastiera.. La mia domanda e': come sara' fatto il header ed il corpo? devo srcivere una funzione o una procedura? sono propenso a pensare che si tratti di una procedura (con quindi output void) ma allora fra parentesi nel header che ci metto oltre alla stringa di caratteri con il nome del file inserito da tastiera?
    Grazie per il vostro aiuto e spero di essermi espresso in maniera comprensibile!

    P.S
    il mio prof non vuole che usiamo variabili globali..

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Passa come parametro il puntatore alla stringa in cui inserirai il nome del file.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    dov e l'errore in questo semplice prog in C?e' dove dico di insrire il nome del file?

    Ciao a tutti! credo che il problema con questo programma e' che devo aver fatto un errore
    nella parte in qui dico all'utente di inserire il nome del file: infatti se lo lancio (dopo averlo
    compilato) mi chiede di inserire il nome del file ma poi si pianta tutto.. come fare?
    grazie per il vostro aiuto!
    P.S se l'errore non e' in quel punto del codice, allora perche' non va?
    P.P.S il file in cui ho i dati sulla matrice e' del tipo .txt oppure .dat..

    codice:
    void LeggiMatrice(int n,FILE *f1,int matriceDAleggere[][MaxDim]);
    void AzzeraMatrice(int n, int matriceDAazzerare[][MaxDim]);
    void AzzeraArray(int n,int array[MaxDim]);
    void SommaRighe(int n, int array[MaxDim], int matrice[][MaxDim]);
    void SommaColonne(int n, int array[MaxDim], int matrice[][MaxDim]);
    
    int main(void)
    {
        int A1[MaxDim],A2[MaxDim];
        int M[MaxDim][MaxDim];
        int DimensioneMatrice;
        char NomeFile[MaxDim];
        FILE *f1;
    
    DimensioneMatrice=3;
    
    printf("Si inserisca il nome del file su cui sono salvati i dati relativi alla matrice.\n");
    scanf("%s", &NomeFile);
    f1=fopen("NomeFile","r");
    LeggiMatrice(DimensioneMatrice,f1,M);
    fclose(f1);
    SommaRighe(DimensioneMatrice, A1, M);
    SommaColonne(DimensioneMatrice, A2, M);
    
    return (0);
    }
    
    /* funzione che legge una matrice da un file, elemento per elemento */
    
    void LeggiMatrice(int n,FILE *f1,int matriceDAleggere[][MaxDim])
    {
         int i,j;
         AzzeraMatrice(n,matriceDAleggere);
         for(i=0;i<n;i++)
         {
                         for(j=0;j<n;j++)
                         {
                                         fscanf(f1,"%d", &matriceDAleggere[i][j]);
                                         }
                                         }
    
    }
    
    
    
    /* funzione che pone  a 0 tutti li elementi di una matrice */
    
    void AzzeraMatrice(int n, int matriceDAazzerare[][MaxDim])
    {
         int i,j;
         for (i=0;i<n;i++)
         {
             for (j=0;j<n;j++)
             {
                 matriceDAazzerare[i][j]=0;
                 }
                 }
    }
    
     /* funzione che pone a zero tutti gli elementi di un array */
     
     void AzzeraArray(int n,int array[MaxDim])
     {
          int i;
          for (i=0;i<n;i++)
          {
              array[i]=0;
              }
    }
     
    
    
    /* funzione che prende matrice e restituisce array con le somme degli elementi sulle righe */
    
    void SommaRighe(int n, int array[MaxDim], int matrice[][MaxDim])
    {
         int i,j;
         AzzeraArray(n,array);
         for (i=0;i<n;i++)
         {
             for (j=0;j<n;j++)
             {
                 array[i]=array[i]+matrice[i][j];
             }
    }
    }
    
    /* funzione che prende una matrice e restituisce un array con per elementi le somme sulle colonne */
    
    void SommaColonne(int n, int array[MaxDim], int matrice[][MaxDim])
    {
         int i,j;
         AzzeraArray(n, array);
         for (i=0;i<n;i++)
         {
             for (j=0;j<n;j++)
             {
                 array[i]=array[i]+matrice[j][i];
                 }
                 }
                 }

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Non ho letto tutto il codice, l'indentazione "a montagne russe" ed il mancato utilizzo delle convenzioni sui nomi fa passare la voglia...
    Ho notato comunque che c'è un errore nell'utilizzo della funzione scanf:

    char NomeFile[MaxDim];
    ...
    ...
    scanf("%s", &NomeFile);

    NomeFile è un vettore, il suo nome è già un indirizzo (quello del primo elemento)! Usare l'operatore & è errato.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790
    altro errore f1=fopen("NomeFile","r");
    cioè chiedi il nome e poi glielo dai te?
    f1=fopen(NomeFile,"r");
    così va bene
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  6. #6

  7. #7
    Wow, grazie ragazzi.. in effetti dopo queste correzzioni gira! l'unico cosa che come risultato mi restituisce un sacco di zeri: cioe' una volta che aggiungo le linee di codice

    codice:
    printf("Le somme degli elementi sulle righe della matrice sono:\n");
    printf(" %d %d %d\n\n", &A1[0],&A1[1],&A1[2]);
    printf("\nLe somme degli elementi sulle colonne della matrice sono:\n");
    printf(" %d %d %d", &A2[0],&A2[1],&A2[2]);
    quello che ottengo e' tanti bei zeri.. beh, oltre al primo elemento della prima risposta, che mi da un numero a 250 cifre... credo abbia a che fare con il mio MaxDim.. do've l'errore? forse nel modo in cui inserisco i dati nelle matrice?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da krzysztof
    Wow, grazie ragazzi.. in effetti dopo queste correzzioni gira! l'unico cosa che come risultato mi restituisce un sacco di zeri: cioe' una volta che aggiungo le linee di codice

    codice:
    printf("Le somme degli elementi sulle righe della matrice sono:\n");
    printf(" %d %d %d\n\n", &A1[0],&A1[1],&A1[2]);
    printf("\nLe somme degli elementi sulle colonne della matrice sono:\n");
    printf(" %d %d %d", &A2[0],&A2[1],&A2[2]);
    quello che ottengo e' tanti bei zeri.. beh, oltre al primo elemento della prima risposta, che mi da un numero a 250 cifre... credo abbia a che fare con il mio MaxDim.. do've l'errore? forse nel modo in cui inserisco i dati nelle matrice?
    Nella printf i parametri non devono essere passati per puntatore (come nella scanf) ... rivedi il tuo libro di C ...

    printf(" %d %d %d\n\n", A1[0], A1[1], A1[2]);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Moderazione

    Ho unito la discussione ad una precedentemente aperta e strettamente correlata.
    Invito a non aprire discussioni multiple per la trattazione del medesimo problema, in futuro.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.