Brauche Hilfe bei C Programm

Hallo. Ich soll ein kleines C Programm schreiben welches Zeichen über die Standardeingabe einliest und diese dann je nach Zeichen anders ausgiebt.
Die exakte Angabe lautet folgendermaßen:
Wird keine Option angegeben, so soll die Eingabe auf die Ausgabe kopiert werden. Wird die
Option -E angegeben, so sollen Zeilenvorsch be (\n) durch die Zeihenfolge $\n ersetzt werden.
Wird die Option -T angegeben, so sollen Tabulatorzeichen (\t) durch die Zeichenfolge ^I ersetzt
werden. Wird die Option -v angegeben, so sollen alle Zeichen außer den zuvor genannten bei-
den folgendermaßen dargestellt werden: Die Zeichen 0 bis 31 werden durch ein Circumflex und
Zeichen + ?@? dargestellt. So wird z.B. 0 zu ^@, 1 zu ^A usw. Zeichen von 32 bis 126 werden
als ihre ASCII-Repr sentation dargestellt, das Zeichen 127 als ^?. Die Zeichen von 128 bis 255
werden als M- und der Darstellung von Zeichen − 128 dargestellt (wobei hier die Ausnahmen f ru
Zeilenvorschub und Tabulator nicht vorkommen). 138 wird zu M-^J, 139 zu M-^K usw. usf.
Anmerkung: Sie k nnen davon ausgehen, dass Ein- und Ausgabe im ASCII-Zeichensatz erfolgen.

Ich habe das Programm so gut wie fertig, aber noch ein kleines Problem. Bei der Option -v habe ich Probleme mit Zeichen >=127. Das Programm kommt dabei einfach nicht in die entsprechenden if.else Blöcke rein (Im Code sind das die letzten 3) und ich habe einfach keine Ahnung warum.

Falls jemand gerade Zeit und Lust hat sich mit dem Problem zu beschäftigen wäre ich für einen Tipp sehr dankbar.


Code:
     while((c=fgetc(stdin))!=EOF){
        inputStr[inputCount]=c;
        inputCount++;
        if(inputCount>5){break;}
    }
     for(i=0; i<=inputCount; i++){
         if((int)inputStr[i]==10){
            if(optionE){
                 outputStr[outputCount]='$';
                 outputCount++;
                 outputStr[outputCount]='/';
                 outputCount++;
                 outputStr[outputCount]='n';
                 outputCount++;
             }
             else{
                 outputStr[outputCount]=inputStr[i];
                 outputCount++;
             }
         }
         else if((int)inputStr[i]==9){
             if(optionT){
                 outputStr[outputCount]='^';
                 outputCount++;
                 outputStr[outputCount]='I';
                 outputCount++;
             }
             else{
                 outputStr[outputCount]=inputStr[i];
                 outputCount++;
             }
         }
         else{
             if(optionV){
                 if((int)inputStr[i]<=31){
                     input=inputStr[i];
                     outputStr[outputCount]='^';
                     outputCount++;
                     outputStr[outputCount]=(char)(input+64);
                     outputCount++;
                 }
                 else if((int)inputStr[i]<=126){
                     outputStr[outputCount]=inputStr[i];
                     outputCount++;
                 }
                 else if((int)inputStr[i]==127){
                     outputStr[outputCount]='^';
                     outputCount++;
                     outputStr[outputCount]='?';
                     outputCount++;
                 }
             else if((int)inputStr[i]==127){
                     outputStr[outputCount]='^';
                     outputCount++;
                     outputStr[outputCount]='?';
                     outputCount++;
                 }
                 else if((int)inputStr[i]<=255){
                     input=inputStr[i];
                     outputStr[outputCount]='M';
                     outputCount++;
                     outputStr[outputCount]='-';
                     outputCount++;
                     outputStr[outputCount]=(char)(input-128);
                 }
                 else{
                     outputStr[outputCount]=inputStr[i];
                    outputCount++; 
                 }
                }
         }
     }
     printf("ihre eingabe: " );
     for(j=0; j<=outputCount;j++){
        printf(" %c:%d ",outputStr[j],outputStr[j]);
     }
 
hmm also spontan würde ich einen Überlauf vermuten.
Ist inputStr ein char Array ?
(signed) char geht nämlich nur von -128 bis 127. Wenn du dann einen Wert >127 angibts wirds wieder negativ.
 
Original von FILE
Ist inputStr ein char Array ?
Ja, ist ein char Array.

(signed) char geht nämlich nur von -128 bis 127. Wenn du dann einen Wert >127 angibts wirds wieder negativ.
Klingt einleuchtend, danke. Mit einem unsigned char hätte ich doch dann doppelte Größe im positiven Bereich, oder? Gäbe es auch noch eine andere Möglichkeit Zeichen mit einem Wert > 127 einzulesen?

edit: Hab jetzt, unsigned char versucht und das Problem scheint behoben. Danke dafür. Auf dieses Forum ist einfach Verlass :-)
Jetzt ist allerdings ein neues aufgetaucht. Gebe ich ?aaaa ein kommt als Ausgabe: M-BM-3aaaa
Eigentlich sollte allerdings nur M-3aaaa ausgegeben werden. Also ohne das M-B
 
Original von FILE
?aaaa ein kommt als Ausgabe: M-BM-3aaaa
manche Zeichen können im ASCII Code nicht dargestellt werden.
wahrscheinlich trifft das auf ? zu und es werden 2 byte zur Darstellung verwendet.
Es soll ja nicht das Zeichen ? dargestellt werden sondern M-(?-128 ). ?-128 wären 3, als das stimmt schon. Das Problem tritt bei allen Zeichen über 128 auf. Um das M- doppelt auszugeben müsste er zwei mal in den else if((int)inputStr<=255) Block reinkommen, wobei ich nicht verstehe warum das so ist.
 
Zurück
Oben