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

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/

10-11 18:28