[C] Logisches Problem mit signed char

MCIglo

Gesperrt
Ich lerne seit ein paar Tagen C im Selbststudium und bisher war auch alles recht einfach und logisch. Vorhin jedoch sties ich auf eine seltsame Bemerkung in meinem Buch.

Der Wertebereich eines unsigned char ist ja bekanntlich 0-255, der eines signed char ist -127 - 127.
Dennoch liefert mir das folgende Programm keine richtige Antwort
Code:
#include <stdio.h> 
 #include <string.h> 
 main () { 
      unsigned char text[80]; 
      int i; 
      strcpy(text,"blubäzz"); 
      for(i=0; i<strlen(text);i++) { 
           if(text[i] == 'ä') 
                printf("\ngefunden"); 
           else 
                printf("\nnicht gefunden"); 
      } 
 }
und zwar findet es in meinem text-array kein 'ä',. Mache ich aber aus dem unsigned ein signed, wird das 'ä' gefunden, obwohl es den int-wert 132 hat, wie mir folgendes Programm zeigt
Code:
#include <stdio.h>
main () {
	int i;
	printf("\n");
	for(i=0;i<=255;i++)
		printf("%i = %c\t",i,i);
	}
mach ich aber in das erste Programm die Zeile
Code:
printf("\ngefunden %i",text[i]);
, so erhalte ich für %i den wert -28

wo ist hier die logik geblieben?
Ich hab auch schon mit einem andren C-Coder gesprochen, und er riet mir, einfach bei char nie ein signed/unsigned zu machen, was ich wohl auch befolgen werde, aber dennoch ist mir das ein absolutes Rätsel.

Ich hoffe mal, dass ich das auch so erklärt habe, dass mir Irgendwer helfen kann ^^
 
Hi,
hier sind zwei printf's

Code:
        printf("%c\n", 132);
        printf("%c\n", -28);

Das erstere gibt mir nichts aus, das zweitere gibt mir ein "ä" aus,
also ist es doch ganz logisch das du ein signed char daher nehmen musst, um ein "ä"
zu finden...

Gruß

RedWing
 
Du vergleichts einen Unicode 'ä' Code im signed Format mit nem Unicode 'ä' im unsigned Format... probier mal
Code:
if(text[i] == (unsigned char)'ä')

Edit: zu spät...
 
Nun gut, eure 2 Aussagen hab ich nachm 5. mal lesen verstanden :)
Das bedeutet also, dass immer, wenn ich ein =='[buchstabe]' mach, er automatisch den signed-wert davon nimmt?


Najo, dann werd ich mal weiterlenrn und hoffen, dass mir das künftig keine Probleme macht ^^
 
Zurück