使用fgets

时间:2015-11-12 05:01:03

标签: c fgets

我有一个有N行的文件(MyFile.txt),其中有一个有7个字段:

  

(id_artist:int,art​​ist:char,id_song:int,song:char,duration:   int,year:int,valoration:int)

它们都用空格('')分隔。我需要一个函数,给定一个歌曲的id(int),返回具有相同id的歌曲的持续时间。

这是我的代码:

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

int main()
{
    int ID;

    FILE *fp = fopen("MyFile.txt","w");
    fprintf(fp,"100 Lennon 1100 Imagine 181 1977 1\n123 Queen 1122 KQueen 190 1983 2\n144 Nirvana 1144 Polly 175 1989 3\n");
    fclose(fp);


    printf("Ingrese id: ");
    scanf("%d",&ID);

    int res = duracion(ID);
    printf(res);

    return 0;
}

int duracion(int id){


    char line[100], artista[30], nombre[30];
    int id_art, id_song, dur, ano, valoracion;

    FILE *file = fopen("MyFile.txt","r");

    while( fgets(line,100,file) != NULL)
    {
        //printf(line);

        sscanf(line,"%d %s %d %s %d %d %d", &id_art, artista, &id_song, nombre, &dur, &ano, &valoracion);

        if(id == id_song){
            return dur;
        }

    }

    return 0;
}

该函数实际上找到指示的行(如果存在),但该函数永远不会返回0或1。 如果我取消注释注释行并搜索非existsintg id,我会得到如下输出:

100 Lennon 1100 Imagine 181 1977 
d123 Queen 1122 KQueen 190 1983 2
<144 Nirvana 1144 Polly 175 1989 3
é

我调试了代码,试图找到问题所在,但我没有得到它。

1 个答案:

答案 0 :(得分:2)

printf(res);          //needed specifier %d 

您忘记了printf中的格式规范。

注意 - 您也忘了在功能中打开文件后关闭文件。