Domanda

Come sapere che fscanf ha raggiunto una nuova riga \ n in un file. Ho usato le mie funzioni per farlo. So di poter usare i budget e quindi sscanf per il modello richiesto. Ma i miei requisiti non sono stabili, alcune volte voglio ottenere stringhe separate da TAB, altre volte stringhe separate da nuove linee e altre volte stringhe separate da caratteri speciali. Quindi, se c'è un modo per conoscere la nuova linea di fscanf, aiutatemi. Altrimenti sono ben accetti anche modi alternativi.

Grazie in anticipo.

È stato utile?

Soluzione

fscanf(stream, "%42[^\n]", buffer);

è un equivalente di fgets (buffer, 42, stream). Non puoi sostituire il 42 con * per specificare la lunghezza del buffer nell'argomento (come puoi fare in printf), il suo significato è sopprimere l'assegnazione. Quindi

fscanf(stream, "%*[^\n]%*c");

leggi (e incluso) il carattere di fine riga successivo.

Qualsiasi identificatore di conversione diverso da [, c e n inizia saltando gli spazi bianchi.

Altri suggerimenti

Kernighan e Pike nell'eccellente libro ' The Practice of Programming 'mostra come usare sprintf () per creare un identificatore di formato appropriato includendo la lunghezza (simile agli esempi nella risposta di AProgrammer), e poi usalo nella chiamata a scanf () . In questo modo, puoi anche controllare i separatori. Le preoccupazioni circa l '"inefficienza" di questo approccio sono probabilmente errate: le alternative sono più difficili da ottenere.

Detto questo, di solito non uso la famiglia di funzioni scanf () per l'I / O dei file; Ottengo i dati in una stringa con una sorta di routine 'get line', quindi uso la famiglia di funzioni sscanf () per dividerli - o altri codici di analisi più specializzati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top