Zeilentrenner und Tabulatorzeichen anders darstellen
-
Ich hab ein Programm geschrieben, um die obige Aufgabe zu bewältigen:
#include <stdio.h> #define SIZE 20 /* Funktion für die Ausgabe: Unescape liefert keinen Resultatwert - Dies bedeutet, dass die Funktion zwei Werte */ char unescape(char s[], char t[]); /* Das Hauptprogramm liest die Eingabe, verarbeitet diese und gibt den neuen Ausgabewert der Zeile aus */ int main(int argc, char* argv[]) { int x,y; char eingabe1[SIZE], Ergebnis[SIZE]; /* "x" ist die Hochzählvariable für die eingabe1 und Ergebnis. Hierbei werden alle Postionen des Array leer geschrieben, damit kein Wert noch vorhanden ist und die Berechnung verfälscht */ for(x = 0; x <= (SIZE-1); x++) for(y = 0; y <= (SIZE-1); y++) { eingabe1[x]=' '; Ergebnis[x]=' '; } printf("Eingabe 1:\n"); /* fgets sorgt dafür, dass nicht mehr Zeichen eingelesen werden, als die maximale Größe vorschreibt */ fgets(eingabe1,SIZE,stdin); /* "x" ist wieder eine Hochzählvariable, die die einzelnen Zeichen durchgeht und komplett die gesamte Eingabe durcharbeitet. Danach wird das Ergebnis in Array gespeichert, der dann später bei der Ausgabe wieder angesprochen wird */ for(x = 0; x <= (SIZE-1); x++) { Ergebnis[x] = unescape(eingabe1); } printf("Das Ergebnis ist:\n"); for(x = 0; x <= (SIZE-1); x++) { printf("%d", Ergebnis[x]); } return 0; } /* In der ersten For-Schleife kontrolliert die Anweisung die Schleife. "i" ist der Index in die ursprüngliche Zeichenkette t[] und j ist der Index in die kopierte und expandierte Zeichenkette s[]. */ char unescape(char s[], char t[]) { int i, j; for (i = j = 0; t[i] != '\0'; i++) if (t[i] != '\\') s[j++] = t[i]; else switch(t[++i]) { case 'n': s[j++] = '\n'; break; case 't': s[j++] = '\t'; break; default: s[j++] = '\\'; s[j++] = t[i]; break; } s[j] = '\0'; }
Eigentlich funktioniert es vom Prinzip her, aber ich bekomme an einer Stelle im Code einen Fehler angezeigt:
Ergebnis[x] = unescape(eingabe1);
. Ich denke, dass liegt daran, dass die Funktion mehr Paramter braucht in dieser Zeile, aber wie kann ich das anstellen ?!?
-
cHillb3rT schrieb:
Ich denke, dass liegt daran, dass die Funktion mehr Paramter braucht in dieser Zeile, aber wie kann ich das anstellen ?!?
Völlig richtig.
char unescape(char s[], char t[]);
Was soll die Funktion machen?
-
Also die Funktion stellt Zeilentrenner und Tabulatorzeichen anders da:
Zeilentrenner: \n
Tabulatorzeichen: \tDiese Zeichen sollen in der Ausgabezeile sichtbar sein.
-
Servus
indem du Bsp.printf("\\t \\n");
machst dan kriegst du \t und \n ausgegeben!
-
for(x = 0; x <= (SIZE-1); x++) { printf("\\t \\n", Ergebnis[x]); }
Wenn ich das so nutze, bekomme ich nicht die gewünschten Zeichen in der Zeichenkette angezeigt.
Ich bekomme sogar gar keine Ausgabe !
-
Ouuu man!
für \\t bekommst du \t ausgegeben
und für \\n \n!!!!
-
hohesC schrieb:
Ouuu man!
für \\t bekommst du \t ausgegeben
und für \\n \n!!!!Ne bekomme ich nicht..... des hab ich auch schon erst gedacht, aber es gibt keine Ausgabe.... das Programm endet nach dem Einlesen der Daten.
-
Soll das prog. so laufen wie des hier???
#include <stdio.h> #define SIZE 20 int main(int argc, char* argv[]) { int x,y; char eingabe1[SIZE], Ergebnis[SIZE]; for(x = 0; x <= (SIZE-1); x++) for(y = 0; y <= (SIZE-1); y++) { eingabe1[x]=' '; Ergebnis[x]=' '; } printf("Eingabe 1:\n"); fgets(eingabe1,SIZE,stdin); for(x = 0; x <= (SIZE-1); x++) { Ergebnis[x] = eingabe1[x]; } printf("Das Ergebnis ist:\n"); for(x = 0; x <= (SIZE-1); x++) { if(Ergebnis[x]=='\t') { printf("\\t"); } else if(Ergebnis[x]=='\n') { printf("\\n"); } else { printf("%c", Ergebnis[x]); } } return 0; }
-
Jap ganz genau.....
Man muss noch diese Anweisungen in eine Funktion packen und dann sollte es im Prinzip gehen.
-
Na dann mach das mal!
-
So habs umgebaut:
#include <stdio.h> #define SIZE 100 char UMBAU(char s[]); int main(int argc, char* argv[]) { int x,y; char eingabe1[SIZE], Ergebnis[SIZE]; for(x = 0; x <= (SIZE-1); x++) for(y = 0; y <= (SIZE-1); y++) { eingabe1[x]=' '; Ergebnis[x]=' '; } printf("Eingabe 1:\n"); fgets(eingabe1,SIZE,stdin); for(x = 0; x <= (SIZE-1); x++) { Ergebnis[x] = eingabe1[x]; } UMBAU(eingabe1); } char UMBAU(char Ergebnis[]) { int x; for(x = 0; x <= (SIZE-1); x++) { if(Ergebnis[x]=='\t') { printf("\\t"); } else if(Ergebnis[x]=='\n') { printf("\\n"); } else { printf("%c", Ergebnis[x]); } } return 0; }
Damit geht es schon mal auf jeden Fall !
-
Nimm den code!!!
#include <stdio.h> #define SIZE 20 char unescape(char s); int main() { int x; char eingabe1[SIZE]; for(x = 0; x <= (SIZE-1); x++) { eingabe1[x]=' '; } printf("Eingabe 1:\n"); fgets(eingabe1,SIZE,stdin); printf("Das Ergebnis ist:\n"); for(x = 0; x <= (SIZE-1); x++) { unescape(eingabe1[x]); } return 0; } char unescape(char s) { if(s=='\t') { printf("\\t"); } else if(s=='\n') { printf("\\n"); } else { printf("%c",s); } return(0); }
-
@ hohesC:
So hab jetzt auch mal deine andere Version getestet. Diese ist etwas straffer und sieht wieder übersichtlicher aus !