Ich glaube, Ihr Problem liegt hier:
if (ch == '\n')
printf( "\n\\n ");
Wenn Sie auf einen Zeilenumbruch in Ihrer Eingabe stoßen, geben Sie einen Zeilenumbruch gefolgt von den Zeichen \
y n
.
Aber was Sie nicht tun ist anpassen i
um anzuzeigen, dass Sie eine neue Zeile begonnen haben. Wenn also der erste Zeilenumbruch das fünfte Zeichen ist, i
ist immer noch 5 und in der nächsten Zeile stehen weniger als zehn Zeichen.
Außerdem denke ich, dass Sie immer noch die ASCII-Codes für Zeilenumbruch und Tabulator ausgeben wollen, und die Formatierung muss überarbeitet werden.
Das nachstehende Beispiel dient nur zu Ihrer Information. Wenn Sie es plagiieren, werden Sie wahrscheinlich schnell enttarnt, also lesen Sie es und verstehen Sie es. Kopieren Sie es nicht blindlings.
#include <stdio.h>
int main (void) {
int ch;
int i = 0;
printf("Please enter some characters.\n");
while((ch=getchar()) != EOF) {
Bis jetzt ist das so ziemlich dasselbe wie bei dir, jetzt wird es ein bisschen anders. Anstatt i % 10 == 0
werden einfach die Zahlen von 0 bis einschließlich 9 durchlaufen. So gibt es keine Probleme mehr, wenn die Eingabe mehr als zwei Milliarden Zeichen enthält :-)
// Ten characters printed? Newline and adjust count.
if(i == 10) {
putchar('\n');
i = 0;
}
Die einzige wirkliche Änderung ist nun die Formatierung und die Aktionen für Zeilenumbrüche. Es muss am Ende mit i
nach dem Druck auf Null gesetzt wird, so dass eine Kombination aus dem Zeilenumbruch-spezifischen i = -1
y el i++
darunter, die jeder Fall durchläuft, wird das tun:
// Handle each case.
if (ch == '\n') {
// Newline? Print and reset to 0 (after i++ below).
printf( "\\n %3d\n", ch);
i = -1;
} else if (ch == '\t')
// Tab? Just print tab symbol.
printf("\\t %3d ", ch);
else if (ch < ' ')
// Control character? Print ^X.
printf("^%c %3d ", ch+64, ch);
else
// Otherwise just print character as is.
printf("%2c %3d ", ch, ch);
// Increment count.
i++;
}
return 0;
}
Ein Probelauf:
pax> echo 'This
...> input crosses many lines, some larger than ten,
...> some smaller.' | ./testprog
Please enter some characters.
T 84 h 104 i 105 s 115 \n 10
i 105 n 110 p 112 u 117 t 116 32 c 99 r 114 o 111 s 115
s 115 e 101 s 115 32 m 109 a 97 n 110 y 121 32 l 108
i 105 n 110 e 101 s 115 , 44 32 s 115 o 111 m 109 e 101
32 l 108 a 97 r 114 g 103 e 101 r 114 32 t 116 h 104
a 97 n 110 32 t 116 e 101 n 110 , 44 \n 10
s 115 o 111 m 109 e 101 32 s 115 m 109 a 97 l 108 l 108
e 101 r 114 . 46 \n 10