4

「point%d%d」のような形式の行を一致させようとしています。したがって、これら2つの整数を2つだけ必要とする場合、「ポイント」はフォーマット文字列にハードコーディングされます。scanfのLinuxのマニュアルページを読んでいることを理解しているので、これは正しく機能するはずです。

次のコード、私が使用したい方法、scanfへの最初の呼び出しは機能しますが、次の呼び出しscanfはエラーコードを返し、stdinからそれ以上の数値を取得することはありません(scanfはstdinからの入力を待つことをブロックしません):

for (;;)
{
    scanf("point %d %d", &x, &y);
    printf("=> point %d %d\n", x, y);
}

このようにして、すべてが期待どおりに機能します。

    int x, y;
    char s[10];

    for (;;)
    {
        scanf("%s %d %d", s, &x, &y);
        printf("=> point %d %d\n", x, y);
    }

私が誤解している可能性があることについての提案はありますか?

ありがとう。

4

3 に答える 3

3

stdin次のスキャンを不一致で停止させる行末文字などの未消費のデータがまだあります。2番目のバージョンでは、この行末データはによって消費されます%s

fgets最初にバッファに、次にそれをバッファリングすることをお勧めしますsscanf。そして、あなたの戻り値をチェックしてください。

于 2009-07-02T14:37:07.820 に答える
1

My guess is that you are not giving it proper input. For example this input will not work:

4 5

This should work:

point 4 5

You didn't mention the error code, but it is probably saying that you didn't follow the format correctly (i.e. put in point before the numbers).

于 2009-07-02T14:21:54.280 に答える
0

優れたプログラミング手法として、ユーザーからの入力を取得する前に、標準入力をフラッシュする必要があります。

于 2009-07-02T15:25:34.963 に答える