Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C] Riempire matrice da file

    dovrei riempire una matrice da file e in ogni riga del file sono contenuti tutti gli elementi della i-esima riga. Come faccio a leggere tutti gli elementi della riga??? So quanti sono ma il numero di colonne della matrice è variabile..

    Ciaooooo e grazie in anticipo..

  2. #2
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    La matrice la leggi tranquillamente con due cicli for e la fscanf.. Sai quanti sono i numeri di una riga ma non sai le colonne quante sono?

  3. #3
    Nella prima riga del file sono contenuti il numero di righe e di colonne della matrice e nelle altre i valori che devono essere messi nelle singole righe della matrice(a00 a01 a02\n a10 a11 a12\n ecc)...Avevo pensato alla fscanf(); ma poi quanti parametri dovrei mettere??

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Una fscanf che legge un solo valore all'interno di un ciclo for che si ripeta per il numero di valori nella riga...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Basta leggere con una fscanf le due dimensioni della matrice, e poi con due cicli for leggere l'intera matrice

    codice:
    fscanf(file, "%d%d", &righe, &colonne);
    for(i=0; i<righe; i++)
        for(j=0; j<colonne; j++)
             fscanf(file, "%d", &matrice[i][j]);

  6. #6
    Grazie mille dopo vari segmentation fault tutto funziona ^^...in un programma analogo devo riempire un vettore di struct
    codice:
    typedef struct studente {  char nome[200];  char cognome[200];  int  matricola;  char iscrizione[200]; } Studente;
    in questo modo funziona utilizzando le dichiarazioni char *nome ecc no...perchè?? Per fare l'ordinamento in base al cognome (avendo passato il vettore di struttura come parametro) per vuole i parametri con la *...un IDE migliore di NetBeans per Ubuntu esiste??? essendo abituato con le visual express mi trovo male...grazie sempre in anticipo

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Originariamente inviato da 00disaster00
    utilizzando le dichiarazioni char *nome ecc no...perchè??
    Ma tu sai cosa vuol dire char * ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    ti scrivo le due strutture:
    codice:
    typedef struct studente
    {
     char nome[200];
     char cognome[200];
     int  matricola;
     char iscrizione[200];
    } Studente;
    
    typedef struct studente
    {
     char *nome:
     char *cognome;
     int  *matricola;
     char *iscrizione;
    } Studente;
    con la prima non mi funzione il bubblesort (devo ordinare un vettore di studenti tramite il campo cognome); con la seconda nn mi funziona il caricamento da file....spero di essermi spiegato meglio

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Originariamente inviato da 00disaster00
    spero di essermi spiegato meglio
    No ... non ti sei spiegato ... non c'è modo di rispondere ad una domanda di questo tipo.

    Che vuol dire "non mi funziona"?

    A me funziona in tutti e due i casi, basta scrivere il codice corretto.

    Quale codice hai scritto? Quale errore hai? Se non lo mostri è un po' difficile darti una risposta.

    E poi, questa discussione è sul riempimento della matrice da file ... dovresti aprire una nuova discussione se cambi argomento ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Visto che "a te funziona in tutte e due i casi" scrivi il codice funzionante...
    Per quanto riguarda il riempimento del vettore di strutture utilizzando la notazione char *s (puntatore a char) non permette il riempimento "corretto" dei campi della struttura, cosa che non accade utilizzando la notazione char s[200] (vettore di char, che è un puntatore all'indirizzo base del vettore); per quanto riguarda il secondo caso l'ordinamento tramite l'algoritmo del bubblesort funziona solamente se si usa la notazione char *s e non char s[200].
    codice:
    void sort(Studente s[], int dim)
    {
        Studente temp;
        int i, ordinato=0;
    
        while(!ordinato)
        {
            dim--;
            ordinato=1;
            for(i=0;i< dim;i++)
                if(strcmp(s[i].cognome,s[i+1].cognome)>0)
                {
                    temp.nome=s[i].nome; //incompatible types when assigning to type ‘char[200]’ from type ‘char *’
                    temp.cognome=s[i].cognome;
                    temp.matricola=s[i].matricola;
                    temp.iscrizione=s[i].iscrizione;
                    s[i].nome=s[i+1].nome;
                    s[i].cognome=s[i+1].cognome;
                    s[i].matricola=s[i+1].matricola;
                    s[i].iscrizione=s[i+1].iscrizione;
                    s[i+1].nome=temp.nome;
                    s[i+1].cognome=temp.cognome;
                    s[i+1].iscrizione=temp.iscrizione;
                    s[i+1].matricola=temp.matricola;
                    ordinato=0;
                }
        }
    e cmq dato che sono nuovo del forum potresti spostare la discussione dato che non ne sono capace

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