2016-03-25 3 views
0

ユーザに自分の名前を入力させるプログラムを作成しようとしています。彼が代わりに番号を与えた場合、私は文字を名前として入力するまで、プログラムのユーザをrepromtしてほしい。文字を入力するのではなく数字を入力する場合には、ユーザを再指定する必要があります。

それは次のようになります。上記のすべてでは

char name[50]; 
printf("What is your name? "); 
scanf("%s", name); 
printf("Hello there, %s\n", name); 

を良いのですが、ときに入力桁数、それは認識されません。数字を入力して文字のみを受け入れる場合にユーザーを再送信したい

私は次のコードを作成しましたが、明らかに機能していません。私は本当にあなたの助けに感謝します。単純に覚えておいてください!

int main() 
{ 
    char name[50]; 

    int age, agenext, id, idnext = 0; 

    //PROMT USER TO INPUT NAME 

    printf("\nPlease enter your name:\n"); 
    scanf("%s", &name); 

     while (isdigit(name)) 

     { 
     printf("wrong input try again"); 

     } 
printf("Your name is %s ",name); 
return 0; 
+0

をStackOverflowのへようこそ! Cタグを追加しました。これが正しくない場合は、編集してください。また、あなたの問題が何であるかを明確に述べるために、あなたの質問を編集する必要があります。 'name 'のすべての要素に' isdigit'を適用しようとしているという問題はありますか?また、条件を修正した場合、 'while'ループは' name'を再入力する機会がないので永遠に繰り返されます。 – C8H10N4O2

+0

また、私はCの頭にあるはずですので、解決策はシンプルでなければなりませんそれは:char name [50] ... printf( "あなたの名前は何ですか?"); scanf( "%s"、名前); printf( "こんにちは、%s \ n"、名前); – VAPORAS

+0

関数の 'scanf()'ファミリのどれかを呼び出すときは、1)操作が成功したことを保証するために、返された値(パラメータ値ではない)を常にチェックします。 2)先頭の空白を消費するように、書式文字列に先頭のスペースを配置します。 3) '%s'書式指定子を使用する場合は、ユーザーが入力バッファーをオーバーフローさせないようにするために常に入力バッファー長より1小さい「最大長修飾子」を使用して、seg faultイベントを引き起こす可能性のある未定義の動作。注意: '%s'では、 'scanf()'は常にNULバイトを付加するので、1以下です。読みやすさとわかりやすさのために、私たち人間の理解を容易にするために – user3629249

答えて

1

はわずかにあなたのコードに変更:

int has_digits(char * str) 
{ 
    for (; *str; str++) 
    { 
     if (isdigit(*str)) 
     { 
      return 1; 
     } 
    } 
    return 0; 
} 

int main() 
{ 
    char name[50]; 

    //PROMT USER TO INPUT NAME 

    printf("\nPlease enter your name:\n"); 
    scanf("%s", name); 
    while (has_digits(name)) 
    { 
     printf("wrong input try again\n"); 
     scanf("%s", name); 
    } 
    printf("Your name is %s\n", name); 
    return 0; 
} 
+0

ありがとうございました。私がiisdigitを私の中で使ったやり方が間違っている理由を説明できますか? – VAPORAS

+0

'isdigit'は個々の文字をチェックするために使用されるので、文字列中の各文字をループし、それらのどれかが数字かどうかを調べる関数を呼び出す必要があります。 scanfのエラーチェックなど、オリジナルの質問の下でコメントされた問題も調べてください。 –

関連する問題