user-0 提问: 大一小白

回复:
user: user-1
content: 看一下打开文件函数的返回值，确定打不开文件的原因是什么？

user: user-0
content: 引用 7 楼 棉猴的回复:干脆用JK0638.txt的绝对路径吧 就算用绝对路径也打不开。

user: user-0
content: 就算用绝对路径也打不开。

user: user-1
content: 干脆用JK0638.txt的绝对路径吧

user: user-2
content: 引用 3 楼 qq_48935908 的回复:[quote=引用 2 楼 自信男孩的回复:]#include <stdio.h> #include <stdlib.h> #include <string.h>  struct paper {     int opus;     char sort[30];     char book[20];     char writer[20];     char press[30];     int number;     float price; }std[15]; int Diaoyon = 10; void menu() {     printf("-------------------------\n");     printf("| 简易图书管理系统 |\n");     printf("-------------------------\n");     printf("| 1:显示全部 |\n");     printf("| 2:按书名查询 |\n");     printf("| 3:按作者查询 |\n");     printf("| 4:按作者排序 |\n");     printf("| 5:按书名排序 |\n");     printf("| 6:添加记录 |\n");     printf("| 7:修改信息 |\n");     printf("| 8:总价 |\n");     printf("| 9:借阅查询 |\n");     printf("| 0:结束 |\n");     printf("-------------------------\n"); } int xsqb() {     int i;     struct paper std[15];     printf("\n编号 分类 书名 作者 出版社 数量 单价");     for (i = 0; i < Diaoyon; i++)         //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);         printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);      return 0;    //定义的是int类型 }  int asmcx() {     char book[20] = "";     int ibook = 0, i;     int G; Loop:     printf("请输入书名:");     //fflush(stdin);    //此句跟编译器有关，不一定有效     scanf("%s", book);     for (i = 0; i < Diaoyon; i++)     {         if (!strcmp(book, std[i].book))         {             //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);             printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);             ibook = 1;         }     }     //下面的语句应该放到for循环外，而不是循环里     if (!ibook)     {         printf("\n未找到匹配图书");     }     printf("\n输入33继续查找：");     //fflush(stdin);     //scanf("%c", G);     scanf("%d", &G);     if (G == 33)         goto Loop;      return 0; }    int azzcx() {     char writer[20] = "";     int abook = 0, i;     int M; Loop:     printf("请输入作者名:");     fflush(stdin);     scanf("%s", writer);     for (i = 0; i < Diaoyon; i++)     {         if (!strcmp(writer, std[i].writer))         {             //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);             printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);             abook = 1;         }     }     //下面的语句放到循环外         if (!abook)         {             printf("\n未找到匹配图书");         }         printf("\n输入00继续查找：");         //fflush(stdin);         //scanf("%c", M);         scanf("%d", &M);         if (M == 0)             goto Loop;  }  int azzpx() {     return 0; } int asmpx() {     return 0; }  int tjjl() {     int i, a;     float j;     char zxc[30]; Loon:     printf("\n请按格式：编号 分类 书名 作者 数量 单价，输入");     //fflush(stdin);     scanf("%d", &a);     if (a >= 1 || a <= Diaoyon)     {         printf("编号重复，请输入1到%d之外的数字：", Diaoyon);         goto Loon;     }     else         std[a - 1].opus = a;     scanf("%s", zxc);     strcpy(std[a - 1].sort, zxc);     scanf("%s", zxc);     strcpy(std[a - 1].book, zxc);     scanf("%s", zxc);     strcpy(std[a - 1].writer, zxc);     scanf("%s", zxc);     strcpy(std[a - 1].press, zxc);     scanf("%d", &i);     std[a - 1].number = i;     scanf("%0.2f", &j);     std[a - 1].price = j;      return 0; }  int xgxx() {     int i, n;     char wtr[20];     float j; Loot:     printf("请输入需修改图书编号：");     scanf("%d", &n);     if (n<1 || n>Diaoyon)     {         printf("输入错误，编号在1到%d之间", Diaoyon);         goto Loot;     }     //printf("所需图书为：%d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort[30], std[n - 1].book[20], std[n - 1].writer[20], std[n - 1].press[30], std[n - 1].number, std[n - 1].price);     printf("所需图书为：%d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort, std[n - 1].book, std[n - 1].writer, std[n - 1].press, std[n - 1].number, std[n - 1].price);     printf("修改顺序为：\n 分类 书名 作者 出版社 数量 单价");     scanf("%s", wtr);     strcpy(std[n - 1].sort, wtr);     scanf("%s", wtr);     strcpy(std[n - 1].book, wtr);     scanf("%s", wtr);     strcpy(std[n - 1].writer, wtr);     scanf("%s", wtr);     strcpy(std[n - 1].press, wtr);     scanf("%d", &i);     std[n - 1].number = i;     scanf("%0.2f", &j);     std[n - 1].price = j;     //printf("\n修改后所得为：\n %d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort[30], std[n - 1].book[20], std[n - 1].writer[20], std[n - 1].press[30], std[n - 1].number, std[n - 1].price);     printf("\n修改后所得为：\n %d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort, std[n - 1].book, std[n - 1].writer, std[n - 1].press, std[n - 1].number, std[n - 1].price); } int zj() {  } int jycx() {  } void ReadFile() {     FILE *fp;     int i = 0, j;     if ((fp = fopen("JK0638.txt", "r")) == NULL)     {         printf("Cannot open file\n");         return;     }     //fscanf(fp, "%s %s %s %s %s %s %s", std[0].opus, std[0].sort, std[0].book, std[0].writer, std[0].press, std[0].number, std[0].price);     fscanf(fp, "%d %s %s %s %s %d %f", &std[0].opus, std[0].sort, std[0].book, std[0].writer, std[0].press, &std[0].number, &std[0].price);     while (!feof(fp))     {         //fscanf(fp, "%d %s %s %s %s %d %f", &std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], &std[i].number, &std[i].price);         fscanf(fp, "%d %s %s %s %s %d %f", &std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, &std[i].number, &std[i].price);         //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);         printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);         i++;     }     Diaoyon = i;     fclose(fp); } void main() {     int ind;     do     {         ReadFile();         menu();         printf("请输入操作编号:");         scanf("%d", &ind);         switch (ind)         {             case 1:xsqb(); break;             case 2:asmcx(); break;             case 3:azzcx(); break;             case 4:azzpx(); break;             case 5:asmpx(); break;             case 6:tjjl(); break;             case 7:xgxx(); break;             case 8:zj(); break;             case 9:jycx(); break;             case 0:exit(17);         }     } while (17);   //这儿为什么用17，用1不一样吗？ }  供参考～  代码问题比较多，但是归纳起来也就几个，多出是相同的错误。建议楼主对比代码找一下自己的问题～ 可以了，十分感谢[/quote]  最重要的是找出自己错误的原因，然后总结学到的东西～

user: user-0
content: 引用 2 楼 自信男孩的回复:#include <stdio.h> #include <stdlib.h> #include <string.h>  struct paper {     int opus;     char sort[30];     char book[20];     char writer[20];     char press[30];     int number;     float price; }std[15]; int Diaoyon = 10; void menu() {     printf("-------------------------\n");     printf("| 简易图书管理系统 |\n");     printf("-------------------------\n");     printf("| 1:显示全部 |\n");     printf("| 2:按书名查询 |\n");     printf("| 3:按作者查询 |\n");     printf("| 4:按作者排序 |\n");     printf("| 5:按书名排序 |\n");     printf("| 6:添加记录 |\n");     printf("| 7:修改信息 |\n");     printf("| 8:总价 |\n");     printf("| 9:借阅查询 |\n");     printf("| 0:结束 |\n");     printf("-------------------------\n"); } int xsqb() {     int i;     struct paper std[15];     printf("\n编号 分类 书名 作者 出版社 数量 单价");     for (i = 0; i < Diaoyon; i++)         //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);         printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);      return 0;    //定义的是int类型 }  int asmcx() {     char book[20] = "";     int ibook = 0, i;     int G; Loop:     printf("请输入书名:");     //fflush(stdin);    //此句跟编译器有关，不一定有效     scanf("%s", book);     for (i = 0; i < Diaoyon; i++)     {         if (!strcmp(book, std[i].book))         {             //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);             printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);             ibook = 1;         }     }     //下面的语句应该放到for循环外，而不是循环里     if (!ibook)     {         printf("\n未找到匹配图书");     }     printf("\n输入33继续查找：");     //fflush(stdin);     //scanf("%c", G);     scanf("%d", &G);     if (G == 33)         goto Loop;      return 0; }    int azzcx() {     char writer[20] = "";     int abook = 0, i;     int M; Loop:     printf("请输入作者名:");     fflush(stdin);     scanf("%s", writer);     for (i = 0; i < Diaoyon; i++)     {         if (!strcmp(writer, std[i].writer))         {             //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);             printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);             abook = 1;         }     }     //下面的语句放到循环外         if (!abook)         {             printf("\n未找到匹配图书");         }         printf("\n输入00继续查找：");         //fflush(stdin);         //scanf("%c", M);         scanf("%d", &M);         if (M == 0)             goto Loop;  }  int azzpx() {     return 0; } int asmpx() {     return 0; }  int tjjl() {     int i, a;     float j;     char zxc[30]; Loon:     printf("\n请按格式：编号 分类 书名 作者 数量 单价，输入");     //fflush(stdin);     scanf("%d", &a);     if (a >= 1 || a <= Diaoyon)     {         printf("编号重复，请输入1到%d之外的数字：", Diaoyon);         goto Loon;     }     else         std[a - 1].opus = a;     scanf("%s", zxc);     strcpy(std[a - 1].sort, zxc);     scanf("%s", zxc);     strcpy(std[a - 1].book, zxc);     scanf("%s", zxc);     strcpy(std[a - 1].writer, zxc);     scanf("%s", zxc);     strcpy(std[a - 1].press, zxc);     scanf("%d", &i);     std[a - 1].number = i;     scanf("%0.2f", &j);     std[a - 1].price = j;      return 0; }  int xgxx() {     int i, n;     char wtr[20];     float j; Loot:     printf("请输入需修改图书编号：");     scanf("%d", &n);     if (n<1 || n>Diaoyon)     {         printf("输入错误，编号在1到%d之间", Diaoyon);         goto Loot;     }     //printf("所需图书为：%d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort[30], std[n - 1].book[20], std[n - 1].writer[20], std[n - 1].press[30], std[n - 1].number, std[n - 1].price);     printf("所需图书为：%d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort, std[n - 1].book, std[n - 1].writer, std[n - 1].press, std[n - 1].number, std[n - 1].price);     printf("修改顺序为：\n 分类 书名 作者 出版社 数量 单价");     scanf("%s", wtr);     strcpy(std[n - 1].sort, wtr);     scanf("%s", wtr);     strcpy(std[n - 1].book, wtr);     scanf("%s", wtr);     strcpy(std[n - 1].writer, wtr);     scanf("%s", wtr);     strcpy(std[n - 1].press, wtr);     scanf("%d", &i);     std[n - 1].number = i;     scanf("%0.2f", &j);     std[n - 1].price = j;     //printf("\n修改后所得为：\n %d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort[30], std[n - 1].book[20], std[n - 1].writer[20], std[n - 1].press[30], std[n - 1].number, std[n - 1].price);     printf("\n修改后所得为：\n %d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort, std[n - 1].book, std[n - 1].writer, std[n - 1].press, std[n - 1].number, std[n - 1].price); } int zj() {  } int jycx() {  } void ReadFile() {     FILE *fp;     int i = 0, j;     if ((fp = fopen("JK0638.txt", "r")) == NULL)     {         printf("Cannot open file\n");         return;     }     //fscanf(fp, "%s %s %s %s %s %s %s", std[0].opus, std[0].sort, std[0].book, std[0].writer, std[0].press, std[0].number, std[0].price);     fscanf(fp, "%d %s %s %s %s %d %f", &std[0].opus, std[0].sort, std[0].book, std[0].writer, std[0].press, &std[0].number, &std[0].price);     while (!feof(fp))     {         //fscanf(fp, "%d %s %s %s %s %d %f", &std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], &std[i].number, &std[i].price);         fscanf(fp, "%d %s %s %s %s %d %f", &std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, &std[i].number, &std[i].price);         //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);         printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);         i++;     }     Diaoyon = i;     fclose(fp); } void main() {     int ind;     do     {         ReadFile();         menu();         printf("请输入操作编号:");         scanf("%d", &ind);         switch (ind)         {             case 1:xsqb(); break;             case 2:asmcx(); break;             case 3:azzcx(); break;             case 4:azzpx(); break;             case 5:asmpx(); break;             case 6:tjjl(); break;             case 7:xgxx(); break;             case 8:zj(); break;             case 9:jycx(); break;             case 0:exit(17);         }     } while (17);   //这儿为什么用17，用1不一样吗？ }  供参考～  代码问题比较多，但是归纳起来也就几个，多出是相同的错误。建议楼主对比代码找一下自己的问题～ 可以了，十分感谢

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  struct paper {     int opus;     char sort[30];     char book[20];     char writer[20];     char press[30];     int number;     float price; }std[15]; int Diaoyon = 10; void menu() {     printf("-------------------------\n");     printf("| 简易图书管理系统 |\n");     printf("-------------------------\n");     printf("| 1:显示全部 |\n");     printf("| 2:按书名查询 |\n");     printf("| 3:按作者查询 |\n");     printf("| 4:按作者排序 |\n");     printf("| 5:按书名排序 |\n");     printf("| 6:添加记录 |\n");     printf("| 7:修改信息 |\n");     printf("| 8:总价 |\n");     printf("| 9:借阅查询 |\n");     printf("| 0:结束 |\n");     printf("-------------------------\n"); } int xsqb() {     int i;     struct paper std[15];     printf("\n编号 分类 书名 作者 出版社 数量 单价");     for (i = 0; i < Diaoyon; i++)         //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);         printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);      return 0;    //定义的是int类型 }  int asmcx() {     char book[20] = "";     int ibook = 0, i;     int G; Loop:     printf("请输入书名:");     //fflush(stdin);    //此句跟编译器有关，不一定有效     scanf("%s", book);     for (i = 0; i < Diaoyon; i++)     {         if (!strcmp(book, std[i].book))         {             //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);             printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);             ibook = 1;         }     }     //下面的语句应该放到for循环外，而不是循环里     if (!ibook)     {         printf("\n未找到匹配图书");     }     printf("\n输入33继续查找：");     //fflush(stdin);     //scanf("%c", G);     scanf("%d", &G);     if (G == 33)         goto Loop;      return 0; }    int azzcx() {     char writer[20] = "";     int abook = 0, i;     int M; Loop:     printf("请输入作者名:");     fflush(stdin);     scanf("%s", writer);     for (i = 0; i < Diaoyon; i++)     {         if (!strcmp(writer, std[i].writer))         {             //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);             printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);             abook = 1;         }     }     //下面的语句放到循环外         if (!abook)         {             printf("\n未找到匹配图书");         }         printf("\n输入00继续查找：");         //fflush(stdin);         //scanf("%c", M);         scanf("%d", &M);         if (M == 0)             goto Loop;  }  int azzpx() {     return 0; } int asmpx() {     return 0; }  int tjjl() {     int i, a;     float j;     char zxc[30]; Loon:     printf("\n请按格式：编号 分类 书名 作者 数量 单价，输入");     //fflush(stdin);     scanf("%d", &a);     if (a >= 1 || a <= Diaoyon)     {         printf("编号重复，请输入1到%d之外的数字：", Diaoyon);         goto Loon;     }     else         std[a - 1].opus = a;     scanf("%s", zxc);     strcpy(std[a - 1].sort, zxc);     scanf("%s", zxc);     strcpy(std[a - 1].book, zxc);     scanf("%s", zxc);     strcpy(std[a - 1].writer, zxc);     scanf("%s", zxc);     strcpy(std[a - 1].press, zxc);     scanf("%d", &i);     std[a - 1].number = i;     scanf("%0.2f", &j);     std[a - 1].price = j;      return 0; }  int xgxx() {     int i, n;     char wtr[20];     float j; Loot:     printf("请输入需修改图书编号：");     scanf("%d", &n);     if (n<1 || n>Diaoyon)     {         printf("输入错误，编号在1到%d之间", Diaoyon);         goto Loot;     }     //printf("所需图书为：%d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort[30], std[n - 1].book[20], std[n - 1].writer[20], std[n - 1].press[30], std[n - 1].number, std[n - 1].price);     printf("所需图书为：%d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort, std[n - 1].book, std[n - 1].writer, std[n - 1].press, std[n - 1].number, std[n - 1].price);     printf("修改顺序为：\n 分类 书名 作者 出版社 数量 单价");     scanf("%s", wtr);     strcpy(std[n - 1].sort, wtr);     scanf("%s", wtr);     strcpy(std[n - 1].book, wtr);     scanf("%s", wtr);     strcpy(std[n - 1].writer, wtr);     scanf("%s", wtr);     strcpy(std[n - 1].press, wtr);     scanf("%d", &i);     std[n - 1].number = i;     scanf("%0.2f", &j);     std[n - 1].price = j;     //printf("\n修改后所得为：\n %d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort[30], std[n - 1].book[20], std[n - 1].writer[20], std[n - 1].press[30], std[n - 1].number, std[n - 1].price);     printf("\n修改后所得为：\n %d %s %s %s %s %d %0.2f", std[n - 1].opus, std[n - 1].sort, std[n - 1].book, std[n - 1].writer, std[n - 1].press, std[n - 1].number, std[n - 1].price); } int zj() {  } int jycx() {  } void ReadFile() {     FILE *fp;     int i = 0, j;     if ((fp = fopen("JK0638.txt", "r")) == NULL)     {         printf("Cannot open file\n");         return;     }     //fscanf(fp, "%s %s %s %s %s %s %s", std[0].opus, std[0].sort, std[0].book, std[0].writer, std[0].press, std[0].number, std[0].price);     fscanf(fp, "%d %s %s %s %s %d %f", &std[0].opus, std[0].sort, std[0].book, std[0].writer, std[0].press, &std[0].number, &std[0].price);     while (!feof(fp))     {         //fscanf(fp, "%d %s %s %s %s %d %f", &std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], &std[i].number, &std[i].price);         fscanf(fp, "%d %s %s %s %s %d %f", &std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, &std[i].number, &std[i].price);         //printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);         printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort, std[i].book, std[i].writer, std[i].press, std[i].number, std[i].price);         i++;     }     Diaoyon = i;     fclose(fp); } void main() {     int ind;     do     {         ReadFile();         menu();         printf("请输入操作编号:");         scanf("%d", &ind);         switch (ind)         {             case 1:xsqb(); break;             case 2:asmcx(); break;             case 3:azzcx(); break;             case 4:azzpx(); break;             case 5:asmpx(); break;             case 6:tjjl(); break;             case 7:xgxx(); break;             case 8:zj(); break;             case 9:jycx(); break;             case 0:exit(17);         }     } while (17);   //这儿为什么用17，用1不一样吗？ }  供参考～  代码问题比较多，但是归纳起来也就几个，多出是相同的错误。建议楼主对比代码找一下自己的问题～

user: user-0
content: 引用 1 楼 棉猴的回复:JK0638.txt文件存在么？ 存在，只是一直cannot open file

user: user-0
content: 引用 1 楼 棉猴的回复:JK0638.txt文件存在么？ 存在，只是一直cannot open file

user: user-1
content: JK0638.txt文件存在么？