0

小さな C プログラムに問題があります。入力を (y および n) に入力できる質問 (以下のコードを参照) を出力しますが、入力された入力 (y または n) に従って何かを出力することを意図していても、他には何も起こりません。しかし、私の質問の後、何も出力されず、プログラムはそのまま終了します。コードは次のとおりです。

#include <stdio.h>

int main()
{
        char string [80];
        static char y;
        static char n;
        printf( "ARE YOU SHAQIRI? [y/n]: " );
        scanf( "%s", string );
        if ("%s" == "y")
                printf("That's impossible. YOU CANNOT BE SHAQIRI YOU IDIOT");
        else if ("%s" == "n")
              printf("I thought not.");
        fflush ( stdin );
        return 0;
}
4

4 に答える 4

6

比較には 2 つの問題があります: if ("%s" == "y"):

  • "%s"scanf フォーマット文字列です。が入力の読み取りに成功した場合scanf、結果は変数: にありますstring
  • ==文字列の比較には使用しないでください。を使用する必要がありますstrcmp

両方のテストでこの形式の比較を使用するためif、どちらの分岐も実行されず、出力は表示されません。

fflushまた、電話しないでstdinください。あなたはそこに意図しているかもしれませんfflush(stdout)

于 2012-10-01T17:26:00.123 に答える
0

これは、C で文字列を比較する方法ではありません。使用する必要がありますstrcmpstringまた、ではなく、変数を比較する必要があります"%s"

于 2012-10-01T17:25:25.293 に答える
0

C には char 配列を比較する組み込みの演算子がないため、次strcmpのように を呼び出します。

if(strcmp(string, "yes") == ) 
{
    /* User said yes */
}

必ず#include <string.h>

于 2016-09-15T05:36:14.320 に答える
0

scanf()戻り値を 2 番目のパラメーターに格納します。ここを参照してください。次に、文字列を間違って比較しています... strcmpを使用してください

私はあなたのプログラムを単純化するためにこれをそこに捨てるつもりです:

  1. 単一の文字を使用して単一の文字入力を格納する
  2. 条件文を希望どおりに保つことができます "=="
  3. 標準入力のフラッシュを削除しましたが、とにかくそれを行うべきではありません。
  4. 'y'/'n' 以外の入力値の「キャッチオール」ケースを追加しました。

変更されたコードは次のとおりです。

#include <stdio.h>  
int main() {
    char input;
    printf( "ARE YOU SHAQIRI? [y/n]: " );
    input = getchar();
    if (input == 'y')
        printf("That's impossible. YOU CANNOT BE SHAQIRI YOU IDIOT");
    else if (input == 'n')
        printf("I thought not.");
    else
        printf("Not valid input...");
    return 0; 
} 
于 2012-10-01T18:03:10.793 に答える