Visualizzazione dei risultati da 1 a 9 su 9

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2016
    Messaggi
    22
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Ma scusa, perché questo problema? Avevi scritto nel primo post

    while(fgets(riga, RIGA, fr) != NULL)

    Adesso perché parli di fgetc ?
    si hai ragione scusami, ma come avevo detto studio da poco il c e non mi sono chiare alcune istruzioni, per esempio "sscanf(tmp++, "%d", &matrice[i][j]);" pensavo che la sscanf si usasse solo in corrispondenza di una stringa e in conoscenza dei campi da riempire e non ne conoscevo assolutamente l'utilizzo tramite puntatore, e visto che non l'hai scritto non ne comprendevo il senso, per questo mi chiedevo se prima del for ci stava una fgetc perché dal punto di vista sintattico viene usata per prelevare un carattere alla volta e mi sembrava molto più plausibile che lo avessi sottinteso, tra l'altro mi è ancora sconosciuto l'utilizzo dei puntatori, in pratica hai assegnato a tmp l'indirizzo del vettore riga[RIGA], che corrisponde all'indirizzo del suo primo elemento, e man mano spostandolo con tmp++, sposti l'indirizzo all'elemento successivo di riga[RIGA] così facendo che la sscanf appena preleva un intero di ferma, ignorando gli spazi con
    "
    while(*tmp && (*tmp)!=' ') tmp++;
    "
    l'ho capito solo adesso!! Ma comunque sia ho riscritto il codice corretto come hai detto tu in codeblocks e non funziona, benchè dal file mi ricava correttamente soltanto la prima riga.


    Questo è il file "file.txt":


    Questo è il codice che ho scitto in codeblocks:
    "
    #include <stdio.h>#include <stdlib.h>
    #define N 4
    #define RIGA 100


    int main ()
    {
    char riga[RIGA];
    char *tmp=riga;
    int matrice[N][N], f, i , j;


    FILE *fr;
    fopen("file.txt", "r");
    fr = fopen("file.txt", "r");

    i=0;
    while(fgets(riga, RIGA, fr) != NULL)
    {
    for (j=0; j<N; j++)
    {
    sscanf(tmp++, "%d", &matrice[i][j]);

    while(*tmp && (*tmp)!=' ')

    tmp++;
    }

    i++;

    }

    fclose(fr);



    for(i=0; i<N; i++)
    {
    for(j=0; j<N; j++)
    printf("%d ", matrice[i][j]);


    printf("\n");
    }


    return 0;
    }
    "

    Questo è l'output:
    output.jpg
    Ultima modifica di rino95; 25-01-2016 a 22:36

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Hai fatto qualche errore ... ti mostro le correzioni ...

    P.S. Devi usare i tag CODE per mostrare il codice e lo devi indentare altrimenti non si capisce nulla ...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    #define N 5            // La matrice nel file e' 5x5
    #define RIGA 100
    
    
    int main ()
    {
        char riga[RIGA];
        int matrice[N][N], i, j;  // f non e' utilizzata
        
        FILE *fr = fopen("file.txt", "r");  // La fopen va fatta una sola volta
    
    
        i=0;
        while(fgets(riga, RIGA, fr) != NULL)
        {
            char *tmp=riga;        // Questa deve essere assegnata ad ogni nuova riga
            for (j=0; j<N; j++)
            {
                sscanf(tmp++, "%d", &matrice[i][j]);
                while(*tmp && (*tmp)!=' ') tmp++;
            }
    
    
            i++;
        }
    
    
        fclose(fr);
        
        for(i=0; i<N; i++)
        {
            for(j=0; j<N; j++)
                printf("%d ", matrice[i][j]);
    
    
            printf("\n");
        }
        
        return 0;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2016
    Messaggi
    22
    Allora il puntatore va dichirato ad ogni nuova riga? Adesso ho capito come mai mi veniva giusta soltanto la prima !! scusa ancora se sono stato così di coccio ma i puntatori proprio non sapevo come usarli Ti ringrazio veramente sei stato molto paziente!!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.