C++ 列表未从txt文件显示 Afisaresta:显示列表 inserareSfarsit:在末尾插入
我不明白为什么它不能从txt文件中获取数据。您能解释一下原因吗?您的代码中有几个问题: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
- 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;
}