1

私は if/else ステートメントにかなりの能力があり、これは非常に古い課題であり、最終的に部分的に完了しました。しかし、コードが機能しない理由を正確に知りたいと思っていました。

ユーザーに名前、身長、性別を入力してもらいたい。私のコードは、「名前は X cm の高さで、男性です」または「名前は X cm の高さで、女性です」という文全体を表示します。

名前を入力して入力すると、すぐにスキップして身長と性別の両方が表示されます。その後何を入力しても、プログラムが終了します。

入力名: ジャック 入力身長 (cm): 180 性別(M/F): コンピューター $

私はしばらくこのコードをいじっていましたが、しばらく立ち往生しています。どんな助けでも大歓迎です。これが私のコードです:

#include<stdio.h>

int main() {
  char name[30];
  char sex;
  float height; 

  printf("Input name: ");
  scanf("%s", name);
  fflush(stdin);
  printf("Input height in cm: ");
  scanf("%f", &height);
  fflush(stdin);

  printf("sex(M/F): ");
  scanf("%c", &sex);
  if (sex == 'M') 
  {
    printf("%s is %f cm tall and male", name, height);
  }
  else if (sex == 'F')
  {
    printf("%s is %f cm tall and female", name, height);
  }
  printf("\n");
  return 0;
}
4

5 に答える 5

5

私が見ることができることから、それはセックスの部分をスキップするだけです-正直に言うと非常に悲しいです:-))。

すぐにスキップして、身長と性別の両方を表示します

入力名:ジャック入力の高さ(cm):180性別(M / F):コンピューター$

あなたはこれを試すことができます:

scanf(" %c", &sex);
       ^

スペースによりscanf、文字を読み取る前に空白が食べられます。

于 2012-07-23T11:54:12.173 に答える
0

fflush(stdin)非常に悪い考えです (未定義の動作)。この呼び出しを、たとえば次のような別の関数呼び出しに置き換える必要があります。

static void
clean_stdin(void)
{
    int c;
    do {
        c = getchar();
    } while (c != '\n' && c != EOF);
}

それで、それはうまくいっているようです。

于 2012-07-23T12:01:33.550 に答える
0

9行目にアンパサンドがありません:

scanf("%s", name);

次のようにする必要があります。

scanf("%s", &name);

たぶんこれが役立ちます

于 2012-07-23T12:02:24.693 に答える
0

これを試すこともできます

printf("sex(M/F): ");
scanf("%s", &sex);
于 2012-07-23T12:02:26.753 に答える
0

stdin から単一の文字を読み取るには、scanf("%c", &c) の代わりに getchar() を使用する必要があります。または、sex の変数タイプを char[2] に変更して、scanf("%s", sex) を使用する必要があります。

于 2012-07-23T16:24:11.707 に答える