c语言程序找不到 已存在的文件

环境 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);
        }
    }
}

运行图:

img

最好在函数里面加个输出文件名的语句,加以判断是否是输入的那个文件名,断点调试

<