【问题标题】:How can I read a file line (integer) and sum the total from line A to line B?如何读取文件行(整​​数)并将总和从 A 行到 B 行?
【发布时间】:2016-10-21 21:45:16
【问题描述】:

说,file1.dat 包含:

123
545
3576
3453
345
34
...
123     //1000th line

我在尝试编写 addNumbers 函数来计算从行 Begin(变量)到行 End(变量)的总数时遇到问题。每个子进程/管道都将计算自己的文件部分,将每个部分总和添加到最终总数中并打印该总数。

变量fileRead是传递给函数的文件对象。

我。 E. 4个子进程,1000行,每个进程做250行。 这是我的工作代码。有什么问题请追问:

division = numberOfLines/numberOfPipes;
int begin = currentPipe*division;
int end = begin + division;

for(i=begin; i<end; i++)
{
    fseek(fileRead, begin, SEEK_CUR);
    while(fgets(line,sizeof line,fileRead)!= NULL)
    {
    total+= total + line;
    }
}

【问题讨论】:

  • @Olaf 删除了不必要的信息。现在有人会评论“请发布代码”
  • 请张贴代码。您将需要编写代码来寻找块之间的近似边界,然后向前搜索直到找到换行符。换行位置是一个块的结尾,换行后的字节是下一个块的开始。因此,您需要一个包含beginend 值的数组,并且您需要在启动线程之前计算这些值。您可以在每个fgets 之后使用ftell 来查看您是否已到达终点。
  • 您需要提出一个具体的问题,以帮助您克服下一个阻碍您的问题。您不能只是转储不完整的代码并要求为您完成。

标签: c scanf fseek


【解决方案1】:

问题...几个问题,都在这里:

while(fgets(line,sizeof line,fileRead)!= NULL)
{
    total += total + line;
}

首先是您尝试使用char *line 作为数字。那是行不通的。与高级语言不同,C 不会将字符串转换为数字。您需要明确地执行此操作,通常使用 atoi(line)

你的 C 编译器应该警告你类型不匹配,这表明你没有在警告的情况下运行。大多数 C 编译器默认不会打开警告,您需要打开它们。通常这是-Wall,如cc -Wall -g test.c -o test

接下来,total += total + line; 的意思是 total = total + total + line,这可能不是您的意思(如果是,您应该直接写出来以清楚说明)。我猜你的意思是total += line


把它们放在一起......

while(fgets(line, sizeof(line), fileRead)!= NULL) {
    total += atoi(line);
}

【讨论】:

    猜你喜欢
    • 2017-11-25
    • 2021-12-05
    • 2021-02-02
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多