gpt4 book ai didi

c - 如何对c中文件中每一行的数字求和?

转载 作者:行者123 更新时间:2023-11-30 16:18:28 24 4
gpt4 key购买 nike

我需要总结文件中每一行的数字,如下所示:

1 2 3

10 -1 -3

我应该将每行写入另一个文件的结果如下:

6

6

当读取文件中最后一个数字之后的每一行中有更多空格时,我会遇到问题,例如,也许我使用“_”来显示此问题:

当我的函数起作用时:

10_11_12 '\n'

1_2_3 '\n'

当我的功能不起作用时:

10_11_12_ _ _ '\n'

1_2_3 '\n'

我想我知道问题出在哪里,但我不知道如何解决。这是我的功能:

int num=0;
char s;
while(fscanf(file, "%d", &num)==1){
fscanf(file, "%c", &s);
sum+=num;

if(s=='\n'){
fprintf(res_file, "%d\n", sum);
sum=0;
}
}

最佳答案

问题是 fscanf 需要一个指向 char 的指针。在您的函数中,您使用的是常规字符 s。

char s;  

您可以通过使 s 成为指针来解决您的问题。首先,分配内存。

char *s = malloc(sizeof(char) + 1);

现在我们可以正确扫描变量 s,然后检查换行符。这里唯一的区别是现在我们通过取消引用 s 检查换行符。

if (*s == '\n')

别忘了用 free() 清理内存泄漏!

free(s);

我能够使用下面的代码获得所需的输出。

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

int processInputFile(char *filename)
{
FILE *ifp;
int buffer = 0;
char *newline = malloc(sizeof(char) + 1);
int sum = 0;

if ((ifp = fopen(filename, "r")) == NULL)
{
fprintf(stderr, "Failed to open \"%s \" in processInputFile.\n", filename);
return -1;
}

while(fscanf(ifp, "%d", &buffer) == 1)
{
fscanf(ifp, "%c", newline);
sum += buffer;

if (*newline == '\n')
{
printf("%d\n", sum);
sum = 0;
}
}

free (newline);
fclose(ifp);
}


int main(int argc, char **argv)
{
if (argc < 2)
{
printf("Proper syntax: ./a.out <n>\n");
return -1;
}

processInputFile(argv[1]);

return 0;
}

关于c - 如何对c中文件中每一行的数字求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55895283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com