2017-09-24 8 views
2

動作しません。また、ここでは「が」営巣:上記のコードでA声明は、私は非常に単純なコードを記述しようとしている

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main() 
{ 
    int age; 
    char gender; 

    printf("How old are you? \n"); 
    scanf("%d", &age); 

    printf("What is your gender? (m/f) \n"); 
    scanf("%c", &gender); 

    if ((age >= 18 && gender == 'm')){ 
     printf("You may enter this website "); 

     if (age <= 20) 
     { 
      printf("dude."); 
     } 
    } 

    if ((age >= 18 && gender == 'f')) { 
     printf("You may enter this website "); 

     if (age <= 20) 
     { 
      printf("young lady."); 
     } 
    } 
    else if (age < 18) 
    { 
     printf("Nothing to see here! \n"); 
    } 
    return 0; 
} 

、私はネスティングifステートメントを使用しようとしています。しかし、私の望む通りではありません。私が年齢に入ると、あなたの性別は何ですか? (m/f)。

2番目の文が印刷されると終了します。しかし、私は理由を知らない。 私は、ユーザーに性別を入力させ、入力された性別と年齢に基づいて文章を出力する必要があります。

私にヒントを教えてください。ラインは読書を、以下ので

scanf("%c", &gender); 

+0

ブロックを行います 'if'文の内側' switch'文を行うことができます... – t0mm13b

+1

私はこれを閉じるために投票しています同様の質問が100000回ここで答えられたので、話題外の質問をします。 OPはデバッグ作業を何も示していませんでした - 第2のscanfと** think **の後に変数に何が含まれているかを見るには十分でした。質問を投稿するのが最初の手段ではなく、最後の手段でなければなりません。 –

答えて

0

あなたのコードのロジックは何も問題はありませんscanf(" %c", &gender)

0

scanf("%c", &gender)を交換してくださいので、あなたが見る行動のための最も可能性の高い理由は、このラインでありますintの場合、バッファに残っている'\n'はすぐにgenderに割り当てられます。

if (age >= 18){ 
    printf("You may enter this website "); 
    if (age <= 20) { 
     printf("%s.\n", gender == 'm' ? "dude" : "young lady"); 
    } 
} 
0

。これは:あなたはまた、いくつかのチェックを組み合わせることで、コードを多少減らすことができます

scanf(" %c", &gender); 

あなたは改行を無視する%cの前にスペースを追加することでこの問題を修正することができますあなたの年齢を入力してEnterキーを押すと、あなたの年齢は年齢変数に格納されますが、 '\ n'(入力キー)は性別によって読み取られるバッファにまだ存在します。 だから、あなたはこれらのTHINGS-

scanf("%d\n",&age) 

または 使用

scanf("%d", &age); 
getchar(); 
関連する問題