Problemi con fgets

di Anonimizzato22836 il
3 risposte
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

  • 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.
  • 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
  • Ok risolto.
    Adesso funziona.

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