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. 您应该只使用一个循环,并且您应该尝试只使用一个调用getchar()... 它与多个调用太混淆,getchar()并且您的代码正试图按照其编写方式丢弃第一行。
  3. 绝对摆脱这种goto说法,你的教练不会喜欢它们,而且它们是完全没有必要的。(请阅读休息继续。)
  4. 在直接调用的 C 解析器getchar()中,能够将字符推回输入流是很有用的。请参阅man 3 ungetc或仅编写一个简单的包装器 在getchar().解析器循环结束时,您应该只需要一个 pushback 字符。
于 2013-01-27T03:42:54.107 回答