【发布时间】:2019-10-28 06:04:29
【问题描述】:
尝试使用此代码读取文本文件。为什么什么都不显示?
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
typedef struct head{
int total;
char quest[SIZE],quest1[SIZE],quest2[SIZE],quest3[SIZE];
struct head *next;
}LIST;
int main(){
LIST *ch;
FILE *fp=fopen("File.txt","r");
if(fp==NULL){
printf("File doesn't exist");
exit(0);
}
else{
fscanf(fp,"%s",&ch->total);
fscanf(fp,"%s",&ch->quest);
fscanf(fp,"%s",&ch->quest1);
fscanf(fp,"%s",&ch->quest2);
fscanf(fp,"%s",&ch->quest3);
}
printf("%s",ch->total);
printf("%s",ch->quest);
printf("%s",ch->quest1);
printf("%s",ch->quest2);
printf("%s",ch->quest3);
fclose(fp);
return 0;
}
输出:
4
Programming
Stack
Linked List
Pointer Structure
任何帮助将不胜感激,谢谢。 .
【问题讨论】:
-
请至少提供文件“File,txt”的第一行
-
fscanf(fp,"%s",&ch->total);是错误的——你需要%d(并且printf("%s",ch->total);也需要%d)。那么fscanf(fp,"%s",&ch->quest);也是错误的;您不需要&— 其他字符串也是如此。您应该检查每个fscanf()调用以确保它成功。 -
第一行是 - 4 第二行 - 编程第 3 行 - 堆栈第 4 行 - 链表最后一行 - 指针结构
-
请edit 并使用stackoverflow.com/editing-help 以更有用的方式提供文本文件的内容。
-
请注意,
scanf()的%s格式会读取一个“单词”——因此您将得到Linked和List读入quest2和quest3。我已经告诉过你如何解决我发现的问题。其中一个答案(我键入的唯一一个)确定了另一个问题(没有为ch分配内存指向)。您的打印格式会将所有数据一起运行,因为格式中没有空格,您应该以换行符结束输出。
标签: c linked-list file-handling