【问题标题】:What is wrong in this C code to find average? [closed]在这个 C 代码中找到平均值有什么问题? [关闭]
【发布时间】:2013-10-08 14:05:55
【问题描述】:
#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 行:标准输入未声明 &当我添加 stdio.h 头文件时,它给了我错误- 第 11 行:需要左值

谁能纠正一下?

【问题讨论】:

  • 什么编译器? Linux、Win 还是 Mac? 11 号线在哪里?
  • 您不能分配给数组名称token。数组不是指针。
  • 先从为什么不在代码中包含 stdio.h 开始。

标签: c loops


【解决方案1】:

token 应该是指针而不是数组

所以替换

char token[100]

通过

char *token;

并替换这一行

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

通过

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

【讨论】:

    【解决方案2】:

    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;
    } 
    

    【讨论】:

    • 感谢工作! :) 顺便请你解释一下吗?
    • ^上面的答案是不言自明的——问我你不明白什么。如果是你写的,我就不应该解释整个事情。
    【解决方案3】:

    token 是不能赋值的数组名。你需要一个char *p_token 来替换它。

    【讨论】:

    • 你能说出正确的路线吗?
    • 更改将 strtok 的返回值分配给 token 的第 11 行。
    【解决方案4】:

    您应该包含头文件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, " ");
     .....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多