C - Vergleichen zweier Zeichen

7

Ich habe Probleme, zwei Charaktere zu vergleichen. Ich habe ein sehr einfaches C-Problem geschrieben, um Befehlszeilenargumente auszuprobieren.

Hier ist mein Code so weit:

%Vor%

Also wenn ich das in das Terminal tippe:

%Vor%

Ich bekomme das als Ausgabe:

%Vor%

Die Ausgabe fehlt Informationen über das Geschlecht, es sollte ein Mädchen sein, seit ich f eingegeben habe. Aber ich habe versucht, durch printf ("% i", Geschlecht) zu überprüfen, die den Wert 0 gab. Ist g == 'f' die falsche Art, zwei Zeichen zu vergleichen?

    
tenkii 10.06.2013, 14:34
quelle

4 Antworten

15

gender ist ein char* , d. h. ein Zeiger auf den ersten Zeichensatz einer Zeichenkette. Wenn Sie das mit einem einzelnen char vergleichen, werden sowohl der char als auch der Zeiger in Ganzzahlen konvertiert und ein Ganzzahlvergleich durchgeführt.

Um Strings zu vergleichen, verwenden Sie strcmp von <string.h> :

%Vor%

Beachten Sie das doppelte Anführungszeichen ( " ), das eine Zeichenfolge und kein einzelnes Zeichen angibt.

    
Fred Foo 10.06.2013 14:37
quelle
4

Sie haben:

%Vor%

Also gender ist eine Zeichenkette, kein Zeichen. Um Zeichenfolgen zu vergleichen, verwenden Sie strcmp .

    
Shahbaz 10.06.2013 14:37
quelle
4

Sie haben Geschlecht zuerst als Zeichenfolge deklariert:

%Vor%

Dann behandeln Sie später als ein einzelnes Zeichen:

%Vor%

Sie müssen sich selbst klar machen, was gender ist, bevor Sie es versuchen und programmieren.
Wähle eine Definition aus und bleibe dabei.

    
abelenky 10.06.2013 14:39
quelle
3

Das Problem besteht darin, dass Sie eine Zeichenfolge (oder besser: char* ) mit einer char vergleichen. Dieser Vergleich (d. H.% Co_de%) vergleicht den Rohzeigerwert mit dem Zeichen, anstatt den Inhalt der Zeichenkette mit dem Zeichen zu vergleichen. Stattdessen müssen Sie den Zeiger dereferenzieren und dann diesen Wert oder Index mit der Zeichenfolge vergleichen, d. H.% Co_de%.

Natürlich ist es auch eine gute Idee zu überprüfen, ob die Zeichenfolge tatsächlich etwas enthält, bevor Sie das versuchen, um einen segfault zu vermeiden.

    
slugonamission 10.06.2013 14:36
quelle

Tags und Links