0

たとえば、以下のコードを見つけてください

main()
{
    int i;
    char s[100];
    printf("Enter the string \n");
    scanf(" %s ",s);
    printf("Enter the string\n");
    scanf("%d",&i);
    printf("%s\n%d\n",s,i);
}

上記のコードの出力は次のとおりです。

Enter the string 
hai
hai
Enter the string
hai
0

1行の入力を受け入れるはずですが、2行目も受け入れています。
scanfのスペースを削除すると、出力は正しく行われます。

誰か説明できますか?

整数(%d)で同じものを使用する場合、それは起こりません。それは文字列で起こっています。

4

5 に答える 5

1

最初scanfに文字列を要求し、先頭の空白をスキップします。
2番目は整数scanfを要求します。

あなたが入るとき、"hai"それは入りますs[]" hai"だけを残して、と同じだったでしょう"hai"
入力する"jai"と、それはとして解析されるため、intゼロになります。

printf2番目がそうであるべきであることを除いてあなたのプログラムに何も悪いことはありません

printf("Enter an integer\n");
于 2012-10-03T09:19:04.053 に答える
1

最初のscanfは、最初にスペースを含む文字列を待機しますが、スペースはありません。したがって、文字列の入力を開始するように求められ、新しい文字列を入力する前に[enter]と入力したため、2回目は受け入れられます。[enter]は、scanfでは空白として扱われます。

このリンクを参照してくださいそれは同じようです

scanfに空白がない場合とscanfに空白がある場合の違いを説明してください。

于 2012-10-03T09:14:47.047 に答える
1

scanf()のマニュアルページから:

空白文字のシーケンス(スペース、タブ、改行など。isspace(3)を参照)。このディレクティブは、入力内の空白を含め、任意の量の空白に一致します。

フォーマット文字列に空白がある場合、入力内の空白文字をスキップします。つまり、文字列の読み取りを続行するために、空白以外の文字を入力する必要がありますs

C / POSIXロケールでは、空白文字は次のようになります。

スペース、フォームフィード('\ f')、改行('\ n')、キャリッジリターン('\ r')、水平タブ('\ t')、および垂直タブ('\ v')。

于 2012-10-03T09:29:15.250 に答える
0

「%s」にはスペースがないはずですそして、センテンスが2回来る理由は、uが2回書いたからです

于 2012-10-03T09:35:12.963 に答える
-1

試す

main()
{
    int i;
    char s[100];
    printf("Enter the string \n");
    scanf("%c", &s);
    fgets(s, 100, stdin);
    printf("Enter the string\n");
    scanf("%d",&i);
    printf("%s\n%d\n",s,i);
}

fgetscいくつかの文字を取得します。

于 2012-10-03T09:43:28.713 に答える