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

    [C] - problemi con la read di un file di testo

    Salve a tutti!

    Ho i seguenti 2 files

    Nel file 1 c'è:
    0 0
    0 1
    0 2

    Nel file 2 c'è:
    0 0 0
    0 0 1
    0 1 0

    In un programma C
    Se dim vale 2 deve andare bene il primo file che ha 2 elementi per riga, e inserire i dati in una matrice
    Se dim vale 3 deve andare bene il secondo..., ma non il primo.
    E' ovvio che un file con n elementi per riga va bene solo se dim = n;

    ora ho il seguente listato:

    Codice PHP:
    ...
    int i=0j=0righe=3dim 2nmatrice[righe][dim];
    char temp[16], buf[16];

    while( 
    i<righe && (n=read(fdbuf2*dim*sizeof(char) ) > 0))
    {
       
    0;
       
    temp strtok(buf" ");
       while(
    temp != NULL && j<dim)
       {
          if(
    atoi(temp)>=0)
          {
              
    matrice[i][j] = atoi(temp);
           
    j++;    
           
    temp strtok(NULL" ");
           }
       }
       
    i++;


    Cosa c'è che non va?

    Non riesco a capire come fare a contare gli elementi per ogni riga, visto che la read prende il numero di byte da leggere...quindi se dim=2, indipendentemente dal file legge i dati e li salva nella matrice...(anche quando non dovrebbe esempio dim=2 e file con 3 elementi per riga...)

    Chi mi aiuta?

    Spero di essermi spiegato...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Forse non ho ben capito, ma penso che ti basti fare un controllo tipo

    codice:
       /* invariato */
       while ( /* invariato */ ) {
          j = 0
          if ( buf[2*dim-1] != '\n' && buf[2*dim-1] != '\0' )
             break;
       /* invariato */
    in questo modo, se dim è 2 "fallirà" la lettura se il file è 3x3; se dim è 3, non andrà avanti la lettura se il file è 3x2. Era questo che volevi fare?

    In ogni caso penso che il controllo che fai nel predicato del while sul numero di righe sia inutile: se il tuo file contiene solo la matrice, arrivata alla fine del file la read restituirà 0 come valore (0 byte letti) e la condizione risulterebbe falsa anche senza il controllo sulle righe.

    EDIT: ah tieni presente che il valore restituito dalla strtok() è un puntatore a char, quindi ridefinisci "temp" come "char *temp" altrimenti ottieni questo errore (almeno col gcc):

    error: incompatible types in assignment # su entrambe le righe della strtok()
    every day above ground is a good one

  3. #3
    Originariamente inviato da YuYevon

    in questo modo, se dim è 2 "fallirà" la lettura se il file è 3x3; se dim è 3, non andrà avanti la lettura se il file è 3x2. Era questo che volevi fare?
    Era proprio questo!

    Grazie!

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.