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

    grande problema:fgets ricorsiva

    Ciao a tutti!
    Ho questo programma che pippolo mi ha aiutato a compilare. Il programma consiste in un serie di istruzioni che, dato un file in ingresso formato da due numeri divisi da spazi(per esempio -12 4), leggono il file, dispongono i due numeri in stringhe distinte e convertono le cifre in numeri interi.Ora devo fare un passetto in avanti, cioè devo supporre che il file sia composto da più linee di dati incollonati a due a due. In questo caso come faccio a trasformare il programma in modo che ad ogni chiamata la fgets mi legga la linea successiva del file?

    Vi scrivo il programma qui sotto; grazie per l'aiuto!!!!

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    char *fgets(char *,int,FILE *);

    int main()
    {
    FILE *fp;
    char stringa[100],s1[10],s2[10];
    int i,j,num1,num2;
    if((fp = fopen("infile.txt","r")) == NULL)
    printf("errore");
    else
    {
    fgets(stringa,100,fp);
    if(stringa[0] != '+' && stringa[0] != '-' && stringa[0] != ' ')
    {
    printf("errore\n");
    }
    else
    {

    for(i = 1;stringa[i] != ' ';i++)
    s1[i] = stringa[i];
    s1[i++] = '\0';
    for(j = 1;stringa[i] != '\0';j++,i++)
    s2[j] = stringa[i];
    s2[j++] = '\0';
    }
    }
    num1 = atoi(&s1[1]);
    num2 = atoi(&s2[1]);
    if(stringa[0] == '-')
    num1 *= -1;
    printf("%d\t%d\n",num1,num2);
    system("PAUSE");
    return 0;
    }
    :gren: :gren: :gren:

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    315
    Tre cose:

    1 - Non si fanno cross post (almeno non nello stesso giorno e con un becero copia&incolla )

    2 - Per postare codice usa i tag apposta in modo da rendere piu' agevole la lettura agli altri;

    3 - La mia versione della soluzione;
    Non ti serve una chiamata ricorsiva, peraltro rischiosa nel caso tu avessi un file molto grande. Fai un ciclo che esegue la stessa lettura fino al raggiungimento della fine del file.
    Ciao,
    Lorenzo

  3. #3
    fgets aggiorna lo stream automaticamente, cioè passa di riga in riga.
    Prova. In ogni caso se fgets non ti funzionasse bene usa fscanf che sicuramente va benone, l'unico problema è che quest'ultimo se le righe contengono informazioni divise da spazi non legge bene.

    .:: Zetra.it - Web. ads . multimedia . graphix ::.
    Realizzazione siti web - Carte Magic ai prezzi più bassi d'italia
    - Comuni e Città

  4. #4
    ATTENZIONE!!!!

    fscanf()
    non tollera gli spazi...

    es:

    se in un file devi estrarre una stringa che presenta degli spazi
    tipo

    MARIO BIANCHI
    VITTORIO VERDI

    con fscanf estrai soltanto MARIO e VITTORIO...
    ...Terrible warlords, good warlords, and an english song

  5. #5
    Scusa PunkIvi

    non mi ero accorto che lo avevi postato anche tu :quote:
    ...Terrible warlords, good warlords, and an english song

  6. #6
    No problem

    .:: Zetra.it - Web. ads . multimedia . graphix ::.
    Realizzazione siti web - Carte Magic ai prezzi più bassi d'italia
    - Comuni e Città

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.