8

EOF が発生するまで座標を配列に入力する必要がありますが、コードに問題があります。ctrl+Z、ctrl+D を使用しました

int main()
{
    int x[1000],y[1000];
    int n=0,nr=0,a,b,i;
    printf("Enter the coordinates:\n");
    while(scanf ( "%d %d ", &a, &b) == 2)
    {
     x[n]=a;
     y[n]=b;
     n++;
    }
    if (!feof(stdin))
    {
       printf("Wrong\n");
    }
    else
    {
       for(i=0;i<n;i++)
       printf("%d %d\n", x[i], y[i]);
    }

  return 0;
}
4

2 に答える 2

18

使用することをお勧めします

while(!feof(stdin) && scanf ( "%d %d ", &a, &b) == 2)

実際には、入力操作の後で(前ではなく!) feofをテストすることをお勧めします。

while (scanf("%d %d ", &a, &b) == 2 && !feof(stdin))

ところで、多くのシステムstdinでは、少なくとも対話型端末では (ただし、stdinpipe(7)の場合はおそらくそうではありません)、ラインバッファリングされています。setvbuf(3)を参照してください。

Linux と POSIX では、すべての行をgetline(3) (端末から読み取る場合は編集機能があるためreadline(3)を使用) で読み取り、その行をsscanf(3) (おそらく も使用)で解析することを検討してください。またはstrtol(3)readline%n

于 2011-11-11T13:34:39.687 に答える
3

あなたのコードに見られる唯一の本当の問題は、scanfフォーマット文字列の余分なスペースです。これらのスペースはscanf、入力で空白文字を消費するように指示します。これにより、scanf空白以外の文字 (文字、数字、句読点、EOF など) に到達するまでコードに戻りません。

その結果、2 つの数字を入力してから を入力した後、プログラムがループをエスケープする前に- ( DOS/Windows では - )を2 回Enter入力する必要があります。CtrlDCtrlZwhile

于 2012-05-08T19:15:39.507 に答える