Problemi con fgets

di il
3 risposte

Problemi con fgets

Ciao a tutti,
sono alle prese con un problemino di lettura di un file testo con fgets.
Il file input.txt è fatto così e devo leggere due righe vuote consecutive:

riga di testo
riga di testo


riga di testo
riga di testo
riga di testo
riga di testo
 

riga di testo
riga di testo
riga di testo
riga di testo
 
riga di testo


riga di testo
riga di testo
riga di testo
riga di testo


NOTA: nelle righe vuote può anche esserci il carattere "á"


Ho scritto il seguente codice ma non funziona:

#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;

int main(){
FILE *stream;

char riga[80];

stream = fopen("input.txt", "r");

while (not(feof(stream))){
fgets(riga, 80, stream);
if ((riga == "") | (riga == "á")){
fgets(riga, 80, stream);
if ((riga == "") | (riga == "á"))
cout<<"due righe vuote"<<endl;
}
else
fgets(riga, 80, stream);
}

fflush(stream);
fclose(stream);
}


Come faccio a leggere due righe vuote consecutive?

Grazie per la cortese risposta.
Carlo

3 Risposte

  • Re: Problemi con fgets

    Non stai usando il Basic, i confronti non si fanno così.
    Si usa la funzione strcmp.

    Tieni presente che la fgets può aggiungere un carattere alla fine della stringa. Controlla la documentazione della fgets.

    Inoltre dovrai modificare il codice perché la logica di individuazione delle due linee é sbagliata.
  • Re: Problemi con fgets

    Grazie per la dritta.
    Ho modificato il codice in questo modo:


    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;

    int main(){
    FILE *stream;
    bool vuota, aaccent;
    char riga[80];

    stream = fopen("input.txt", "r");

    while (not(feof(stream))){
    fgets(riga, 80, stream);
    vuota = strcmp(riga, "\n");
    aaccent = strcmp(riga, "á\n");
    if (not(vuota) | not(aaccent)){
    fgets(riga, 80, stream);
    if (not(vuota) | not(aaccent))
    cout<<"due righe vuote"<<endl;
    }
    else
    fgets(riga, 80, stream);
    }

    fflush(stream);
    fclose(stream);
    }

    Funziona solo in parte perché nel file testo input.txt che ho postato nel primo messaggio
    ci sono tre doppie righe vuote invece mi riconosce soltanto le prime due.
    Dove sbaglio?

    Grazie,
    Carlo
  • Re: Problemi con fgets

    Ok risolto.
    Adesso funziona.

    Grazie,
    Carlo
Devi accedere o registrarti per scrivere nel forum
3 risposte