Ich versuche ein Programm zu schreiben, das Textzeilen aus einer Eingabedatei liest, die Buchstaben in den Wörtern neu anordnet und sie dann in eine Ausgabedatei schreibt. Bisher habe ich dies:Wie kann ich mit meinem C-Programm mehr als eine Textzeile aus einer Datei lesen?
void processFile(FILE* ifp, FILE* ofp) {
char line[1024];
char word[1024];
char* lineptr = line;
char temp;
printf("Begin file processing\n");
while (fgets(line, BIGLINE, ifp) != NULL){
while(sscanf(lineptr,"%s",word) == true)
{
if (strlen(word) >= 4){
temp = word[1];
word[1] = word[2];
word[2] = temp;
}
fputs(word,stdout);
fputs(word,ofp);
fputs(" ",stdout);
fputs(" ", ofp);
lineptr += strlen(word) + 1;
}
}/*while*/
printf("End file processing\n");} /* processFile */
Im Moment ist die Ausgabedatei lautet:
<rpe><div calss="text_to_html">Project Gtuenberg The Avdentures of Sehrlock Hlomes, by Atrhur Cnoan Dyole
Aber ich brauche es alle Zeilen in meinem Test-Datei zu lesen
<pre><div class="text_to_html">Project Gutenberg The Adventures of Sherlock Holmes, by Arthur Conan Doyle
This eBook is for the use of anyone anywhere at no cost and with
almost no restrictions whatsoever. You may copy it, give it away or
re-use it under the terms of the Project Gutenberg License included
with this eBook or online at <a href="http://www.gutenberg.net"
class="_blanktarget">www.gutenberg.net</a>
</div></pre>
ich auch Ich muss sicherstellen, dass, wenn ich eine Textdatei als Eingabedatei verwende, sie alle Zeilen lesen würde, anstatt nur die erste. Wie kann ich das mit dem machen, was ich bereits habe?
Beachten Sie, dass '% s' eine durch Leerzeichen getrennte Zeichenfolge liest. Ist es das was du willst? Haben Sie bei jedem Schritt gedruckt, was Sie bekommen? Warum nicht? Oder sind Sie mit einem Debugger durchgegangen, anstatt Druckanweisungen hinzuzufügen? Du hast den Charakterwechsel programmiert; War das was du beabsichtigst? –
Ihr Hauptproblem besteht darin, dass Sie 'lineptr' innerhalb der' while (fgets (...)! = NULL) Schleife zurücksetzen müssen, bevor Sie die innere Schleife starten. Es ist weniger wahrscheinlich, dass Sie auf dieses Problem stoßen, wenn Sie alle Variablen so platzieren, dass sie den minimal möglichen Gültigkeitsbereich haben - also sollte "temp" innerhalb des "if" -Blocks definiert sein, während "word" und "lineptr" definiert sein sollten die äußeren und inneren Schleifen. Sie haben ein kleines Pech, dass die erste Zeile, die Sie bearbeiten, die längste Zeile ist. es bedeutet, dass "lineptr" auf ein Nullbyte zeigt. –
@ JonathanLeffler Ich benutzte 'sscanf (lineptr,"% s ", Wort)', so dass es ein Wort nach dem anderen lesen würde. Ich konnte mir keinen anderen Weg vorstellen. Ich denke, ich muss eine weitere Schleife hinzufügen, so dass sie die gelesenen Zeilen erhöht. – Megan