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: \t

    Diese 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 ! 👍


Log in to reply