Dieser Code kehrt um und legt das Ergebnis in Datei, aber nicht vollständig richtig. Wie, einige Probleme mit der Erkennung von Leitungsunterbrecher oder etw. Hier ein Beispiel:Probleme mit der Umkehrung der Zeile in Datei
Quelle:
This is a line.
This is another line.
Quick brown fox jumps over a lazy dog!
Ergebnis:
(blank line)
.enil a si sihT
.enil rehtona si sihT!god yzal a revo spmuj xof nworb kciuQ
#include <stdio.h>
#include <string.h>
char *reverse (char *str)
{
char *begin, *end, c;
if (!str || !(*str))
return NULL;
for (begin=str, end=str+strlen(str)-1; begin<end; begin++, end--)
{
c=*begin;
*begin=*end;
*end=c;
}
begin=str+strlen(str)+1; *begin='\0'; //??
return str;
}
void main(void)
{
char line[1000];
FILE *fsrc, *frslt;
fsrc=fopen("source.txt", "r");
if (fsrc==NULL) return;
frslt=fopen("result.txt", "w");
while (!feof(fsrc))
{
fgets (line, 1000, fsrc);
fputs (reverse(line), frslt);
}
fclose(fsrc);
fclose(frslt);
}
[Die feof in der while-Schleife ist falsch - lesen Sie] (http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong) –
Der Code funktioniert gut, aber es wird die Zeilen zu gut umkehren. Was passiert, ist, dass der Zeilenumbruch ('\ n') ebenfalls umgekehrt ist, also wird der Zeilenumbruch am Anfang jeder Zeile platziert, aber" Der schnelle Braunfuchs ... "hat keine Zeile füttern am Ende, deshalb werden die Zeilen 2 und 3 zusammen geschmiert. Versuchen Sie, '\ n' als Ende der umzukehrenden Zeile zu verwenden. –
Sie brauchen es nicht, da Sie in-Place arbeiten: 'begin = str + strlen (str) +1; * begin = '\ 0'; 'und du fügst zu viel hinzu (kein Problem, da der Puffer größer ist, aber immer noch ...) –