2017-07-19 5 views
0

Okay, also habe ich eine for-Schleife, die jeden Buchstaben einer Zeichenkette überprüft, um sicherzustellen, dass die Zeichenkette vollständig aus alphabetischen Zeichen besteht, bevor Sie mit der nächsten Stufe des Programms fortfahren.Wie verwende ich ein isalpha-Ergebnis, um eine if-Anweisung zu initiieren?

Allerdings habe ich Probleme mit meiner if-Anweisung, die ausgeführt werden soll, wenn die "isalpha" -Funktion falsch zurückkommt.

string keyword = argv[1]; 
for (int i = 0; i < strlen(keyword); i++) 
{ 
    char letter = keyword[i]; 
    if (isalpha(letter) = false) 
    { 
     printf("Only use alphabetical characters in your key\n"); 
     return 1; 
    } 

Ich erhalte die Fehlermeldung:

error: expression is not assignable if (isalpha(letter) = false)

Wie kann ich eine if-Anweisung erhalten, die aufgrund eines isalpha falsch zu sein einleitet?

Wie ist das Folgende falsch?

if (isalpha(letter) = false) 
+8

Es ist '=='. Oder einfach '! Isalpha (Buchstabe)'. –

+0

Wir sind keine menschlichen Debugger, Sie sollten Compilerprobleme selbst beheben. – BetaRunner

+3

@BetaRunner Es ist nicht einmal Debugger, sondern Fehlermeldung Parser ... –

Antwort

1

How is the following wrong?

if (isalpha(letter) = false) 

Nun, es ist eine Zuordnung! =-verwendet wird, einen Wert zuweisen, und Sie können keinen Wert auf einen Funktionsaufruf (für hoffentlich offensichtlichen Gründen)

Zum Vergleich Werte zuzuweisen, verwenden Sie die == Operator in C.

sagte, , Überprüfung auf Gleichheit mit == ist überhaupt nicht notwendig, wenn Sie bereits boolean Werte haben. Schreiben Sie einfach:

if (!isalpha(letter)) 
3

Sie haben einen Tippfehler: if (isalpha(letter) = false) ist kein Vergleich, sondern eine Aufgabe. Sie sollten stattdessen schreiben:

if (isalpha(letter) == false) 

Ein häufiger Weg zu schreiben, dies mit dem ! Operator ist:

if (!isalpha(letter)) 

ist jedoch zu beachten, dass isalpha() unterschiedliche Verhalten für negative Werte von EOF nicht definiert hat, und wenn die char Typ ist signiert, der Wert letter kann negativ sein. Dieses Problem wurde mit einem Cast behoben:

if (!isalpha((unsigned char)letter)) 
+0

Ja, aber 'isalpha' und Cousins ​​nehmen' int'. –

+0

@WeatherVane: 'isalpha()' und Freunde von '' nehmen ein 'int', sind aber nur für alle Werte vom Typ' unsigned char' und dem speziellen negativen Wert 'EOF' definiert. Ein negatives 'char'-Argument wird mit dem gleichen Wert nach' int' befördert, und wenn es nicht dasselbe wie'EOF' ist, ist das Verhalten nicht definiert. Wenn 'char' den gleichen Wert wie' EOF' hat, ist das Verhalten zwar definiert, aber möglicherweise falsch: ''ÿ'' hat den Wert' -1' für den Zeichensatz ISO-8859-1, wird als 'EOF' behandelt ist im Allgemeinen auf den gleichen Wert definiert. Es ist im Grunde das gleiche Problem wie 'char c = getchar();'. – chqrlie

+0

Der Wert des Zeichens muss als "Zeichen ohne Vorzeichen" übergeben werden, damit es sinnvoll ist. 'char' kann standardmäßig signiert werden, aber immer wenn Zeichenwerte in der C-Bibliothek verwendet werden, wird der Wert des' unsigned char' berücksichtigt: 'strcmp()' vergleicht die String-Bytes als umgewandelt in 'unsigned char' , wie 'memcmp()', für die es weniger fraglich ist, gibt 'getchar() 'den Wert eines Bytes aus dem Datenstrom als' unsigned char 'zurück,' putchar() 'konvertiert sein Argument in ein' unsigned char' und gibt das zurück ... Alle Funktionen von '' benötigen vorzeichenlose Zeichenwerte oder den Wert' EOF'. – chqrlie

Verwandte Themen