2017-08-14 1 views
0
#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <math.h> 
#include <string.h> 

int main() { 
    char userPassword[20]; 

    printf("Type in your password: \n"); 
    scanf("%c", &userPassword); 

    if (isalpha(userPassword) == 0) { 
     printf("Nice"); 
    } else { 
     printf("Nope"); 
    } 

    return 0; 
} 

J'essaie de trouver un code permettant de vérifier si le mot de passe ne contient que des lettres. Pourquoi ce code ne fonctionne qu'avec le signe "== 0". Mon ami m'a dit de mettre ceci et mon code fonctionne. Que fait le "== 0"?Vérification de la valeur de retour de `isalpha`

+0

Si vous ne voulez pas '== 0', essayez' if (isalpha (userPassword)!) ' –

+0

Vous lisez seulement et tests un char, pas une chaîne. – stark

+0

'isalpha' renvoie '0' (faux) si le test échoue, sinon il renvoie une valeur non nulle (vrai) si le test réussit. Donc, utilisez '!' comme suggéré ci-dessus. – Serge

Répondre

2

La signature de isalpha est int isalpha (int c).

  • Paramètres caractère c pour classer

  • Valeur de retour valeur non nulle si le caractère est un caractère alphabétique, zéro autrement.

Donc, si c n'est pas alpha, il renvoie une valeur non nulle, sinon 0.

À propos du programme:

  1. scanf besoins char *, non &userPassword, qui est char ** . scanf("%s", userPassword) est OK.
  2. passez char à isalpha au lieu de char *.

Si vous voulez vérifier si une chaîne est entièrement alpha, vous pouvez simplement parcourir la chaîne et vérifier chaque caractère. Comme:

bool is_all_alpha(char *s) { 
    for (; *s!='\0'; ++s) { 
     if (!isalpha(*s)) return false; 
    } 
    return true; 
} 

  1. http://en.cppreference.com/w/cpp/string/byte/isalpha
+2

'& userPassword' est' char (*) [20] ', pas' char ** ' –