我需要总结文件中每一行的数字,例如: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/