#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行:预期的左值
任何人都可以纠正它吗?
答案 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;
}