需要帮助重组循环/获取简单的平均代码才能工作。

时间:2013-01-27 03:39:55

标签: c loops average

第一次使用C和我被要求为我的Systems类做一个简单的平均函数WITHOUT 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;

}

1 个答案:

答案 0 :(得分:1)

  1. while(...);中的分号会导致无限循环,这与说法相同:while(...) continue;
  2. 你应该只使用一个循环,你应该尝试只使用一次getchar()的调用...它与多个getchar()调用太混乱了,而你的代码试图抛弃第一行它写的方式。
  3. 绝对摆脱goto陈述,你的导师不会喜欢他们,他们是完全没必要的。 (请阅读 break 继续。)
  4. 在直接调用getchar()的C语法分析器中,能够将字符推回输入流是很有用的。请参阅man 3 ungetc或者只是在getchar().周围编写一个简单的包装器。在解析器循环结束时,您只需要一个回推字符。