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