Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的字符串操作,以查找字符串中数字的平均值_C_String_Text Files - Fatal编程技术网

C中的字符串操作,以查找字符串中数字的平均值

C中的字符串操作,以查找字符串中数字的平均值,c,string,text-files,C,String,Text Files,我有一个CSV格式的C文本文件。因此,每行文本都是这样的记录: bob numbers,10,11,12,13 john no,7,13,10 我可以在C中使用什么函数来获得一个输出,使每行平均值向上舍入到2d.p.,如下所示 bob numbers 11.5 john no 6.67 您可以使用strtok和作为分隔符来读取名称和数字,然后使用atoi将数字字符串转换为实际数字。此外,fgets允许您逐行读取文件。计算平均值是相当简单的。考虑使用ATOF代替ATOI,把数字看成是双倍的,而

我有一个CSV格式的C文本文件。因此,每行文本都是这样的记录:

bob numbers,10,11,12,13
john no,7,13,10
我可以在C中使用什么函数来获得一个输出,使每行平均值向上舍入到2d.p.,如下所示

bob numbers 11.5
john no 6.67

您可以使用strtok和作为分隔符来读取名称和数字,然后使用atoi将数字字符串转换为实际数字。此外,fgets允许您逐行读取文件。计算平均值是相当简单的。考虑使用ATOF代替ATOI,把数字看成是双倍的,而不是整数。

你的问题可以得到解决,如下所示:< /P>

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

int main()
{
    int a[20];
    FILE *fp = fopen("input.txt","r");
    char buff[255],*p;
    int i,j,k;
    float sum;

    while(fgets(buff,255,fp) != NULL)
    {
        i = 0;
        k = 0;
        sum = 0;
        p = strtok(buff," ");
        while(p!=NULL)
        {
            if(i>1)
            a[k++] = atoi(p);
            p = strtok(NULL,",");
            i++;
        }
        for(j=0;j<k;j++)
        sum += a[j];

        printf("%5.2f\n",(float) (sum/k));
    }
    return 0; 
}

首先你需要a,然后a会有用,然后可能是a。现在,您可以尝试使用这些函数来编写程序。如果你对这个程序有任何问题,那么回到这里,写一个关于这个问题的详细问题,并提供你的代码。如果你只是在学习,那么getline或fgets会逐行读取一个文件getline会在返回时提供更多关于该行的信息。将行读入缓冲区后,字符串变量getline也会为您分配空间,然后您可以使用strtok和atoi解析该行,或者在每次转换为数字后仅使用strtod reseting pointer=endptr。注意:这个问题已经回答了很多次,答案已经在这个网站上了。谢谢你的帮助。你的代码给了我正确的平均值。然而,我确实有一些问题。首先,我们要做的是,255,fp!=空行它是如何通过整个文本的,fgets不是只从文本文件中获取一行吗。到第二条线怎么走。其次,p=strtokbuff;为什么我们不能把它改成p=strtokbuff,,;。我试着这样做,但后来我得到了错误的平均值。再次感谢您的帮助,如果您能回答我的问题,我将不胜感激。@SSRed您在第一部分的问题中有答案。while循环一直循环,直到fgets没有任何可读取的内容为止。因此,只有当它读取了所有行时才会发生这种情况。关于strtok的第二部分这个API维护一个内部状态,我们只需要传递实际字符串一次,而要获取其他tok,我们只需要传递NULL,如图所示。如果这个答案是正确的,就把它标记为已回答,这对其他人会有帮助。