环境 VS2010,调试结果 主函数输入fName(文件名),结果 file erro。但文件已经建好了,而且把r改成w+也没用,怎么解决
#include
#include
#include
#define N 10//错误单词个数
#define EN 50//单词英文长度
#define CN 50//单词中文长度
#define WN 10//每轮背单词个数
FILE *fp;
int num=0;
typedef struct word //每轮所背单词
{
char English[EN];//每个单词英文
char Chinese[CN];//每个单词中文
}word;
void spell(char *fName,word *core);
word character[WN];//每组单词个数
word fail[N];//每组背完错误单词个数
int main()
{
char choose;
char filename[50];
printf("输入所学单词本文件名\n");
scanf("%s",filename);//本轮学习单词所在文件名
printf("\n下面进入拼写环节\n");
spell(filename,character);//拼写函数
return 0;
}
void spell(char *fName,word *core)
{
int flag;
char try[50];
fp=fopen(fName,"r");
if(fp==0)
{
printf("file erro!\n");
exit(1);
}
fscanf(fp,"%s%s",core[num].English,core[num].Chinese);
while(!feof(fp))
{
num++;
fscanf(fp,"%s%s",core[num].English,core[num].Chinese);
}
fclose(fp);//将本轮学习单词输入数组
for(num=0;num<10;num++)//判断正误
{
printf("%s\n",core[num].Chinese);
printf("请拼写正确单词\n");
scanf("%s",try);
printf("\n");
flag=strcmp(core[num].English,try);
if(flag==0)
num++;
else
{
do{
printf("错误,请重新输入\n");
scanf("%s",try);
flag=strcmp(core[num].English,try);
}while(flag);
}
}
}
代码没什么大问题,输入的文件名,必须是带路径和文件后缀的全名,如:d:\\word_record.txt 。代码里还有其它的问题,见注释,修改如下,供参考:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10//错误单词个数
#define EN 50//单词英文长度
#define CN 50//单词中文长度
#define WN 10//每轮背单词个数
FILE *fp = NULL;
int num=0;
typedef struct word //每轮所背单词
{
char English[EN];//每个单词英文
char Chinese[CN];//每个单词中文
}word;
void spell(char *fName,word *core);
word character[WN];//每组单词个数
word fail[N];//每组背完错误单词个数
int main()
{
char choose;
char filename[50];
printf("输入所学单词本文件名\n");
scanf("%s",filename);//本轮学习单词所在文件名
printf("\n下面进入拼写环节\n");
spell(filename,character);//拼写函数
system("pause");
return 0;
}
void spell(char *fName,word *core)
{
int flag;
char Try[50]; // try 是C++里的关键字,改为:Try[] 修改
fp=fopen(fName,"r");
if(fp==0)
{
printf("file erro!\n");
return; //exit(1); 返回主函数
}
//fscanf(fp,"%s%s",core[num].English,core[num].Chinese); 修改
while(1) //while(!feof(fp)) 修改
{
if (fscanf(fp,"%s%s",core[num].English,core[num].Chinese) != 2) break; //修改
num++;
}
fclose(fp);//将本轮学习单词输入数组
for(int i=0;i<num;i++)//for(num=0;num<10;num++)//判断正误 修改
{
printf("%s\n",core[i].Chinese);
printf("请拼写正确单词\n");
scanf("%s",Try);
printf("\n");
flag=strcmp(core[i].English,Try);
//if(flag==0) 修改
//num++; 修改
if (flag) //else 修改
{
do{
printf("错误,请重新输入\n");
scanf("%s",Try);
flag=strcmp(core[i].English,Try);
}while(flag);
}
}
}
运行图:
最好在函数里面加个输出文件名的语句,加以判断是否是输入的那个文件名,断点调试
<