0

初めて C を使用し、Systems クラスに対して scanf を使用せずに (getchar のみを使用して) 単純な平均関数を実行するように求められました。コードをコンパイルするためだけに不必要に複雑なループを書いてしまい、コンパイル+実行した後でも、キーボード入力を取り込んだ後は何もしないようです。

#include <stdio.h>
#include <stdlib.h>

//average program

//use getchar to get numbers separately instead of scanf and integers.
//Not sure why. Most likely to build character.

int main (int argc, const char * argv[])
{
    char x,z;
    float avg;
    int tot,n,b;

    printf("Input Integer values from 1 to 100. Separate each value by a space. For example: 23 100 99 1 76\n");

     ret:

    x=getchar();
    while( x != '\n' );
    {
        if(x==isspace(x))
        { goto ret;}


     opd:

    z=getchar();
        if ((z == isspace(z)))
        {
            b = x - '0';//subtracting 0 from any char digit returns integer value
            tot +=b;
            n++;
            goto ret;
        }

        else if(z == '\n')
        {
            b = x - '0';
            tot +=b;
            n++;
            goto end;
        }

        else
        {
            x = x*10;
            x = x + z;
            goto opd;
        }
    }

    end:
    avg=tot/n;

    printf("Taking of the average of the values. The average is %1.2f\n",avg);

    return avg;

}
4

1 に答える 1

1
  1. のセミコロンはwhile(...);無限ループを引き起こします。これは次のように言っているのと同じです:while(...) continue;
  2. ループを 1 つだけ使用し、呼び出しを 1 つだけ使用するようにしてください。getchar()複数の呼び出しがあると混乱しすぎてgetchar()、コードが最初の行を書き捨てようとしています。
  3. 間違いなくgotoステートメントを削除してください。インストラクターはそれらを気に入らず、まったく不要です。(休憩中に読んで続けてください。)
  4. 直接呼び出す C パーサーgetchar()では、文字を入力ストリームにプッシュバックできると便利です。man 3 ungetc簡単なラッパーを参照するか、記述してgetchar().ください。パーサー ループの最後に必要なプッシュバックは 1 文字だけです。
于 2013-01-27T03:42:54.107 に答える