小码过海 2023-04-14 17:58 采纳率: 85.7%
浏览 53
已结题

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

环境 VS2010,调试结果 主函数输入fName(文件名),结果 file erro。但文件已经建好了,而且把r改成w+也没用,怎么解决


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#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);
            }
    }
}
  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-04-15 11:51
    关注

    代码没什么大问题,输入的文件名,必须是带路径和文件后缀的全名,如: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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月17日
  • 已采纳回答 4月17日
  • 创建了问题 4月14日

悬赏问题

  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?