这个C代码找到平均值有什么问题?

时间:2013-10-08 14:05:56

标签: c loops

#include <stdlib.h>
#include <string.h>

int main(void){
double sum=0;
int ii=0;
char buf[256], token[100]; // I am making this "finite length". You need to know how long the line is that you allow...

printf("Enter the numbers to average on a single line, separated by space, then press <ENTER>\n");
gets(buf, 255, stdin);
token = strtok(buf, " ");
while(token != NULL) {
sum += atof(token);
ii++;
token = strtok("", " "); // get next number
}
printf("AVERAGE: ***** %lf\ *****", sum / (double)ii);
return 0;
} 

它给出了这个错误 - 第9行:stdin未宣布 &安培;当我添加stdio.h头文件时,它给了我错误 - 第11行:预期的左值

任何人都可以纠正它吗?

4 个答案:

答案 0 :(得分:2)

token应该是指针而不是数组

所以替换

char token[100]

通过

char *token;

并替换此行

token = strtok("", " "); // get next number

通过

token = strtok(NULL, " "); // get next number

答案 1 :(得分:0)

您应该包含头文件stdio.h

  

当我添加stdio.h头文件时,它给出了错误 - 第11行:预期的左值

token是不可修改的l-vlue。你无法修改它 一种可能的解决方案是声明指针token_ptr并指定返回值strtok

char buf[256], token[100]; // I am making this "finite length". You need to know how       long the line is that you allow...
char *token_ptr ;
printf("Enter the numbers to average on a single line, separated by space, then press  <ENTER>\n");
gets(buf, 255, stdin);
token_ptr = strtok(buf, " ");
 .....

答案 2 :(得分:0)

token是无法分配的数组名称。你需要char *p_token来代替它。

答案 3 :(得分:0)

token是一个数组和数组名称是一个不可修改的左值。

  

以下对象类型是左值,但不是可修改的左值:

An array type
An incomplete type
A const-qualified type
An object is a structure or union type and one of its members has a const-qualified type

你需要一个指向char的指针。 strtok返回指向字符串中找到的最后一个标记的指针。

所以这个:

char buf[256], token[100]; 

应该是这样的:

char buf[256], *token; 

这也是错误的:

gets(buf, 255, stdin);

应该是:

fgets(buf, 255, stdin);

您的更正代码:

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

int main(void){
double sum=0;
int ii=0;
char buf[256], *token; // I am making this "finite length". You need to know how long the line is that you allow...

printf("Enter the numbers to average on a single line, separated by space, then press <ENTER>\n");
fgets(buf, 255, stdin);
token = strtok(buf, " ");
while(token != NULL) {
sum += atof(token);
ii++;
token = strtok("", " "); // get next number
}
printf("AVERAGE: ***** %lf\ *****", sum / (double)ii);
return 0;
}