2017-08-14 13 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; 
} 

パスワードに文字のみが含まれているかどうかを確認するコードを思いついています。なぜこのコードは "== 0"記号でしか動作しません。私の友人はこれと私のコードが動作するように私に言った。 "== 0"は何をしますか?`isalpha`の戻り値を確認する

+0

、(!はisalpha(userPassword属性が))' –

+0

あなただけ読んでいる場合は、 '試してみて、テスト1つの文字列ではありません。 – stark

+0

'isalpha'は、テストが失敗すると '0'(偽)を返し、そうでなければ、テストに合格するとゼロ以外(真)を返します。だから、 '!'上記のように。 – Serge

答えて

2

isalphaの署名はint isalpha (int c)です。文字はアルファベット文字、ゼロがそうであるならば

  • パラメータ C文字が

  • 戻り値 非ゼロ値を分類します。

    1. scanfニーズchar *、ない&userPasswordchar **です:cはアルファでない場合

そう、それはプログラムについてそうでない場合は0

、非ゼロを返します。 scanf("%s", userPassword)は問題ありません。

  • char *の代わりにchar~isalphaを渡す。
  • 文字列がすべてアルファであるかどうかを確認したい場合は、文字列を繰り返して各文字を確認するだけです。同様に:あなたは `== 0 'をしたくない場合は

    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'は' char ** 'ではなく' char(*)[20] 'です。 –

    関連する問題