C++ 列表未从txt文件显示 Afisaresta:显示列表 inserareSfarsit:在末尾插入

C++ 列表未从txt文件显示 Afisaresta:显示列表 inserareSfarsit:在末尾插入,c++,list,linked-list,queue,C++,List,Linked List,Queue,我不明白为什么它不能从txt文件中获取数据。您能解释一下原因吗?您的代码中有几个问题: main不返回整数 未对占位符一致且正确地使用fscanf 您没有检查fscanf的返回值是否失败 如果您有可用的C++11支持,则应将NULL替换为NULL ptr 正确的代码应如下所示: void main() { nodLista* LS=NULL; FILE* F=fopen("asaceva.txt","r"); if(F!=NULL) { char bu

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

您的代码中有几个问题:

  • main不返回整数
  • 未对占位符一致且正确地使用fscanf
  • 您没有检查fscanf的返回值是否失败
  • 如果您有可用的C++11支持,则应将NULL替换为NULL ptr
正确的代码应如下所示:

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();
}
intmain(){
nodLista*LS=NULL;
文件*F=fopen(“asaceva.txt”,“r”);
如果(F!=NULL){
字符缓冲区[100];int-id;float-pret;
如果(!fscanf(F,%d,&id))

难道这是
int main
,而不是
void main
。你最好使用
std::string
而不是C风格的IO。这就是我被教导如何使用它们的方法。为什么feof是错误的?@mariusxd他链接到的问题的答案回答了这个问题。
fscanf
的格式说明符需要
。该链接解释得很好,与C IO应用的逻辑相同。单独读取时很容易导致错误,更不用说在使用前不检查输入是否成功了。您还要求使用
fscanf
读取
buffer
时出现缓冲区溢出。通过执行
s可以很容易地避免这种溢出omeFileStream>>someCppString;
main()
不必有返回语句。@0x499602D2:您误读了答案。我没有说它必须返回零。我说它必须返回整数!@0x499602D2:
main()
是一个特例。@LaszloPapp:仍然没有正确的输入失败检查。@Deduplicator:视情况而定……有些人喜欢只指出真正的问题,有些人喜欢指出每一个错误,甚至是与问题无关的错误。这都是个人品味的问题,不值得争论。尽管如此,我还是很高兴你这么做是时候避免进一步争论了,因为我对此没有强烈的反对意见。:)
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;
}