0

やあみんな(そして女の子)、私はこれを理解しようと試みました. 私はgdbを一歩踏み出しましたが、それを理解できません。だから、私はあなた方の一人に迷惑をかけなければならないでしょう。各選択肢が 1 から 12 の整数で、通常のように単調に増加する単純なメニューがあります。えーと、たとえば 5 を選択すると、そこから始まり、名前、年齢などを尋ねることで反復し続けるようにコーディングしようとしています。これは課題のためなので、その方法は教えないでください。私が知る必要があるのは、選択番号1についてです。ifステートメントを使用しており、ifステートメントはこれらの行で始まります...

    printf("Enter Name: \n");
    gets(name);
    printf("Name: ");
    puts(name);
    printf("\n");

このコードは意図したとおりに機能します。次に、ステートメントの後半で、直前のブロックのフロートに scanf を使用することを除いて、同じタイプのことをいくつか実行した後です。私はこのコードを持っています...

    printf("Enter Major: \n");
    gets(major);
    printf("Major: ");
    printf("\n");

このコードは、入力を待機しません。Major: と Major: を次の行に出力するだけです。理解できません。gdb でステップスルーしたところ、ステップ実行時に適切に機能しました。その後、実行すると、同じことが再び起こります。誰かが私に何が起こっているのか教えてください。助けてくれてありがとう。ここにいる大多数の人々は専門家であり、単純なことで悩まされることを気にしないことは知っていますが、答えが見つからず、教授はその日のために去りました. みんなありがとう。-裁判所

おそらく、問題のあるコードの直前のコードを提供する必要があります。意図したとおりに動作するのはこれです... printf("Enter Height: \n"); scanf("%f", &高さ); printf("高さ: %f2.1.", 高さ); 関連する変数は次のように宣言されます... char name[25], major[25]; そして浮き高さ。再度、感謝します。

4

1 に答える 1

3

直前のブロックのフロートに scanf を使用することを除いて

あなたの問題の鍵です。を実行しscanf("%f", &var)、改行で終了する数値を入力すると、scanf は改行を読み取りません。フロートに「123abcd」と入力してみると、abcd がメジャーに詰め込まれることがわかります。

数値の後ろにある可能性のある空白をスキップするために使用scanf("%f ", &var)します (フォーマット文字列の空白に注意してください)。

さらに、gets はバッファ オーバーフローを引き起こす可能性があるため使用しないでください。

于 2014-02-05T20:23:09.387 に答える