2015-11-12 21 views
0

我有N行文件(MyFile.txt的),一个至极有7个领域:掌握与fgets垃圾桶阅读文件

(id_artist:INT,艺术家:焦炭,id_song:INT,歌曲:焦炭,持续时间: int,year:int,valoration:int)

它们全部用空格('')分隔。我需要一个函数,给定一首歌(id)的id,返回具有相同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。 如果我取消对注释行并搜索非existintg ID,我得到这样的输出:

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

我调试的代码试图找到问题的地方,但我不明白。

+0

1)通过检查确认“MyFile.txt”写入正确。 2)这是真实的代码吗? – chux

回答

2
printf(res);   //needed specifier %d 

您忘记了格式规格在printf这里。

注 -此外,您忘记在功能中打开文件后关闭文件。

+0

非常感谢你,这是我的问题。我习惯了C++和printf以及scanf规范,这让我很困惑。祝你今天愉快! – Shula