Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    15

    Acquisizione stringa da file

    (LINGUAGGIO C)

    Ciao ragazzi, ho incontrato un problema nella scrittura del seguente programma "Il file numeri.txt contiene un elenco di numeri in formato ascii, uno per riga, preceduti dalla base della sua rappresentazione espressa come intero (0 = binario, 1 = esadecimale e 2 = ottale). Si scriva un programma in linguaggio C che legga da riga comando il numero corrispondente alla base ed estragga dal file numeri.txt solo i numeri in ascii corrispondenti alla base salvandoli in una matrice di caratteri, li converta in decimale e li visualizzi sullo schermo."

    codice:
    FILE NUMERI.TXT
    
    0 101001
    1 A3F
    0 010011
    0 011
    In pratica stavo scrivendo la funzione che prende in ingresso la base cercata, il puntatore al file
    di dati e la matrice di caratteri contente il numero e restituisce quanti numeri con la base cercata sono stati trovati.

    codice:
    int Leggi_NumeriAscii(int base_cercata, FILE *fpin, char nc[][NCAR]) 
    {
        char temp;
        int i=0,j=0,k=0;
        
        while(!feof(fpin)){
            fscanf(fpin,"%c",&temp);
            printf(" temp=%c  basecercata=%d\n",temp,base_cercata);
            if(temp==base_cercata){
                fscanf(fpin,"%s",&nc[i]);
                printf("      nc[%d]=%s",i,nc);
               i++;
            }
            }
        printf("\n___________\n");
        return i;
    }
    Di sicuro il codice è da rivedere per intero, però il problema principale è la parte in grassetto, ogni volta che faccio partire il programma non mi entra nella condizione "if(temp==base_cercata)" e non riesco proprio a capire dov'è che sbaglio...Vi prego illuminatemi...............

    EDIT: penso che il mio errore sia nel confrontare due tipi di dati differenti, un char con un int...
    Ultima modifica di brizioss; 02-06-2015 a 01:27

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Infatti ... Usa un int per leggere il numero e confrontalo...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    15
    Sto provando come mi ha consigliato, ho cambiato così il programma :

    codice:
    int Leggi_NumeriAscii(int base_cercata, FILE *fpin, char nc[][NCAR]) {
        int temp;
        int i=0,j=0,k=0;
        
        while(!feof(fpin)){
            fscanf(fpin,"%d",&temp);
            //printf(" temp=%c  basecercata=%d\n",temp,base_cercata);
            if(temp==base_cercata){
                fscanf(fpin,"%s",&nc[i]);
                printf("      nc[%d]=%s",i,nc[i]);
            }
            i++;
            }
        printf("\n");
        return i;
    }
    In pratica ho cambiato la dichiarazione di "temp" da CHAR a INT e il formato di acquisizione del numero da file in "fscanf(fpin,"%d",&temp);", ciò che accade è che entra in loop perché legge da file i primi numeri 0 101001 poi però arriva nella seconda riga, trova l'1 e subito dopo A3F e come ho detto entra in loop....Forse non dovrei proprio arrivare a far memorizzare nella variabile "temp" il carattere che viene dopo il primo numero di ogni riga del file.
    Non c'è un modo per incrementare il puntatore e farlo puntare in ogni ciclo al primo elemento di riga del file ?? io ho provato semplicemente con "fpin++" però non va sicuramente bene...
    Ultima modifica di brizioss; 02-06-2015 a 17:01

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    15
    EDIT : sono riuscito a risolvere il problema usando un vettore di char temporaneo e immagazzinandovi il contenuto della stringa dopo il primo numero della riga così : fscanf(fpin,"%d %s",&tempn,&temps); quindi tutto apposto.
    Però in ogni caso, come ho scritto prima,
    non c'è un modo per incrementare il puntatore e farlo puntare in ogni ciclo al primo elemento di riga del file ?? io ho provato semplicemente con "fpin++" però non va sicuramente bene...

  5. #5
    Potresti eliminare tutti i caratteri 'superflui' fino al carattere new-line/line-feed di ogni riga con un ciclo tipo questo :

    codice:
    unsigned int caracter=0;
    do
        caracter = fgetc( fpin );
    while( caracter != EOF && caracter != '\n' );
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2015
    Messaggi
    15
    dovevo pensarci di più :\ . In ogni caso ti ringrazio !

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.