0

このプログラムでは、2番目と4番目のscanfがスキップされます。理由はわかりません。理由を教えてもらえますか?

#include<stdio.h>
main()
{
 int age;
  char sex,status,city;
   printf("Enter the persons age \n");
   scanf("\n%d",&age);
   printf("enter the gender\n");
   scanf("%c",&sex);
   printf("enter the health status");
   scanf("%c",&status);
   printf("where the person stay city or village");
   scanf("%c",&city);
   if(((age>25)&&(age<35))&&(sex=='m')&&(status=='g')&&(city=='c'))
   printf("42");
   else if(age>25&&age<35&&sex=='f'&&status=='g'&&city=='c')
    printf("31");
    else if(age>25&&age<35&&sex=='m'&&status=='b'&&city=='v')
   printf("60");
  else
  printf("no");

       }
4

2 に答える 2

3

scanf()を使用して文字を読み取る場合、入力バッファーに改行文字が残ります。

変化 :

   scanf("%c",&sex);
   printf("enter the health status");
   scanf("%c",&status);
   printf("where the person stay city or village");
   scanf("%c",&city);

に:

   scanf(" %c",&sex);
   printf("enter the health status");
   scanf(" %c",&status);
   printf("where the person stay city or village");
   scanf(" %c",&city);

scanfに空白を無視するように指示するscanfのフォーマット文字列の先頭の空白に注意してください。

または、 getchar()を使用して改行文字を使用することもできます。

   scanf("%c",&sex);
   getchar();
   printf("enter the health status");
   scanf("%c",&status);
   getchar();
   printf("where the person stay city or village");
   scanf("%c",&city);
   getchar();
于 2013-01-27T19:24:33.920 に答える
0

私はいつもあなたが使っているのと同じ問題を抱えているscanfので、代わりに文字列を使います。私は使うだろう:

#include<stdio.h>
main()
{
    int age;
    char sex[3],status[3],city[3];
    printf("Enter the persons age \n");
    scanf("\n%d",&age);
    printf("enter the gender\n");
    gets(sex);
    printf("enter the health status");
    gets(status);
    printf("where the person stay city or village");
    gets(city);
    if(((age>25)&&(age<35))&&(sex[0]=='m')&&(status[0]=='g')&&(city[0]=='c'))
        printf("42");
    else if(age>25&&age<35&&sex[0]=='f'&&status[0]=='g'&&city[0]=='c')
        printf("31");
    else if(age>25&&age<35&&sex[0]=='m'&&status[0]=='b'&&city[0]=='v')
        printf("60");
    else
        printf("no");
}

最初scanfの質問でまだ問題が発生する場合(2番目の質問をスキップgets)、ちょっとしたトリックを使用できますが、新しいライブラリを含める必要があります

#include<stdlib.h>
...
char age[4];
...
gets(age);
...
if(((atoi(age)>25)&&(atoi(age)<35))&&(sex[0]=='m')&&(status[0]=='g')&&(city[0]=='c'))

また、char文字列を整数(int)に変換するため、を使用するatoiたびに使用してください。ageatoi

于 2013-04-14T01:17:56.993 に答える