列表不显示来自txt文件

时间:2014-04-08 23:36:47

标签: c++ list linked-list queue

void main() {
    nodLista* LS=NULL;
    FILE* F=fopen("asaceva.txt","r");
    if(F!=NULL) {
        char buffer[100]; int id;float pret;
        fscanf(F,"d",&id);
        while(!feof(F)) {
            fscanf(F,"f",&pret);
            fscanf(F,"s",buffer);
            Produs* p= creareProdus(id,pret,buffer);
            LS=inserareSfarsit(LS,*p);
            fscanf(F,"%d",&id);
        }
        afisareLista(LS);
    }
    _getch();
}
  • afisareLista:显示列表
  • inserareSfarsit:最后插入

我不明白为什么它没有从txt文件中获取数据。你能解释一下原因吗?

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些问题:

  • 主要不返回整数。
  • 不使用fscanf一致且正确地使用占位符。
  • 您没有检查fscanf的失败返回值。
  • 如果您有C ++ 11支持,则应使用nullptr替换NULL。

正确的代码应该是这样的:

int main() {
    nodLista* LS=NULL;
    FILE* F=fopen("asaceva.txt","r");
    if(F!=NULL) {
        char buffer[100]; int id;float pret;
        if (!fscanf(F,"%d",&id))
            cout << "Error happened: " << ferror(F) << ", error string: " << strerror(errno) << endl;
        while(!feof(F)) {
            if (!fscanf(F,"%f",&pret))
                cout << "Error happened: " << ferror(F) << ", error string: " << strerror(errno) << endl;
            if (!fscanf(F,"%s",buffer))
                cout << "Error happened: " << ferror(F) << ", error string: " << strerror(errno) << endl;
            Produs* p= creareProdus(id,pret,buffer);
            LS=inserareSfarsit(LS,*p);
            if (!fscanf(F,"%d",&id))
                cout << "Error happened: " << ferror(F) << ", error string: " << strerror(errno) << endl;
        }
        afisareLista(LS);
    }
    _getch();
    return 0;
}