c语言中的结构与文件处理

c语言中的结构与文件处理,c,C,我从一个文件读入一个结构数组,然后一个问题一个问题地打印出来 文件中看起来像这样! 1:När kom potatisen to Europa?;A:1300塔莱;B:1500塔莱;C:900塔莱;D:1700塔莱;B D 2:I vilken enhet mats elektrisk spänning?;A:安培;B:伏特;C:焦耳;D:瓦特 B 3:Från vilket land har vi fått lego?;答:泰斯克兰;B:澳大利亚人;C:日本;D:丹麦 D 这是我的密码!

我从一个文件读入一个结构数组,然后一个问题一个问题地打印出来

文件中看起来像这样!

1:När kom potatisen to Europa?;A:1300塔莱;B:1500塔莱;C:900塔莱;D:1700塔莱;B
D
2:I vilken enhet mats elektrisk spänning?;A:安培;B:伏特;C:焦耳;D:瓦特
B
3:Från vilket land har vi fått lego?;答:泰斯克兰;B:澳大利亚人;C:日本;D:丹麦
D
这是我的密码!

#杂注警告(禁用:4996)
#包括
#包括
#包括
结构测验
{
字符问题[50];
char*alt[4];
答案[1];
};
int main(){
结构测验所有问题[50];
int i=0;
答案;
档案*海达尔;
haidar=fopen(“gameee.txt”,“r”);
char-str[500];
char*ptr;
while(fgets(str,sizeof(str),haidar))//读取500个字符
{
ptr=strtok(str,“;”;//将我们的发现分为两部分
如果(ptr==NULL){
}    
否则{
strcpy(所有问题[i].问题,ptr);//存储问题
}
ptr=strtok(NULL,;”;//并保持拆分
如果(ptr==NULL){
}
否则{
所有问题[i].alt[0]=malloc(10);
strcpy(所有[i].alt[0],ptr);//存储第一个选项
}
ptr=strtok(NULL,;”;//并保持拆分
如果(ptr==NULL){
}
否则{
所有问题[i].alt[1]=malloc(10);
strcpy(所有[i].alt[1],ptr);//存储第二个选项
}
ptr=strtok(NULL,;”;//并保持拆分
如果(ptr==NULL){
}    
否则{
所有问题[i].alt[2]=malloc(10);
strcpy(all_ques[i].alt[2],ptr);//存储第三个选项
}
ptr=strtok(NULL,;”;//并保持拆分
如果(ptr==NULL){
}    
否则{
所有问题[i].alt[3]=malloc(10);
strcpy(all_ques[i].alt[3],ptr);//存储第四个选项
}
而(fgets(str,500,haidar)==NULL){
printf(“错误\n”);
}
如果(str==NULL){
printf(“错误\n”);
}    
否则{
strcpy(所有问题[i].correctanswer,str);//存储正确答案
fgets(str,sizeof(str),haidar);//读一行(然后扔掉)
i++;
}
}
printf(“%s\n%s\n%s\n%s\n%s\n”,所有问题[0]。问题,所有问题[0]。alt[0],所有问题[0]。alt[1],所有问题[0]。alt[2],所有问题[0]。alt[3],ptr);
答案=(getch());
如果(答案==所有问题[0]。正确答案[0]){
printf(“右”);
}
其他的
printf(“错误的\n”);
printf(“%s\n%s\n%s\n%s\n%s\n”,所有问题[1]。问题,所有问题[1]。alt[0],所有问题[1]。alt[1],所有问题[1]。alt[2],所有问题[1]。alt[3],ptr);
答案=(getch());
如果(答案==所有问题[1]。正确答案[0]){
printf(“右”);
}
其他的
printf(“错误的\n”);
}
我想打印出问题,然后打印出用户将从中选择的备选方案,等等。但当我在VS2013中运行它时,我得到了这个错误

调试断言失败!
第57行
表达式(str!=NULL)

但是没有第57行!!请帮助

该代码有几个严重问题:

  • 第64行删除
    ,这里有一个无限循环
    
  • str
    NULL
    进行比较是没有用的(这总是错误的!),这似乎会在运行时导致问题(我的编译器在编译时抱怨)
  • 第78行和第88行的
    printf
    参数太多(请重新考虑格式…)

更正后,它似乎起作用了(至少我能回答两个问题).

那一行是代码的那一行…对不起!我不明白@souravghosh不要检查输入文件中的行号。检查代码中的那一行。我读到的第57行出现在其中一行之间:
如果(ptr==NULL){}
编译器告诉您代码中的第57行有错误,而不是您的变量“line 57”或输入文件的第57行有错误或任何类似的奇怪信息:)。好的!我试着逐行阅读代码好几次,但是我发现了错误!