首页 > 解决方案 > 来自txt文件的总和浮点数,一行字符串后跟一个整数c ++

问题描述

我正在尝试将手动输入歌曲库的分钟数相加,但无法弄清楚如何从每 4 行中提取浮点数直到列表末尾以求和。可以添加此列表,因此它不是要从中提取数据的固定行数。是否可以按照我格式化 txt 文件的方式执行此操作?其他函数将此文件用于显示目的,因此我试图保持格式相同。

这是存储在文本文件“songLibrary.txt”中的数据

Title
Album
Artist
1.5
Title
Album
Artist
1.7
Title
Album
Artist
3.1

标签: c++

解决方案


您需要继续阅读,直到遇到文件结尾。需要注意的一件事是,在读取文件之前无法检测到文件结尾。这就是为什么测试同时在那个while()if()下面的原因。理论上应该在每次读取后检查它,但是由于我们正在丢弃数据,因此没有任何意义。

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

int main()
{
    FILE *fin = fopen(  "songLibrary.txt", "rt" );
    double sum = 0.0;

    if (fin != NULL)
    {
        char buffer[128];

        while ( !feof( fin ) && !ferror( fin ) )
        {
            // File format:
            //     Title
            //     Album
            //     Artist
            //     some-number
            fgets( buffer, sizeof(buffer), fin );  // read and junk 3 lines of text
            fgets( buffer, sizeof(buffer), fin );
            fgets( buffer, sizeof(buffer), fin );

            fgets( buffer, sizeof(buffer), fin ); // We should have just read a number
            if ( !feof( fin ) && !ferror( fin ) )
            {
                double value = strtod( buffer, NULL );  // TODO check for errors
                sum += value;
            }
        }
        fclose(fin);
    }

    return 0;
}

推荐阅读