c语言用户自定义文件名无法运行

Gnglas 2019-10-10 11:35:56
#include<stdio.h>
typedef struct student
{
char New_name[20];
char name[20];
int chines, math, english;

}stu;
main()
{
char a[20];
FILE* fp;
stu max;
printf("输入文件名:"); getch();
fgets(max.New_name, 20, stdin); fp = fopen(max.New_name, "wt+");
printf("输入学生名字:"); getch();
fgets(max.name, 20, stdin);
printf("请输入学生语文:"); getch();
scanf_s("%d", &max.chines);
printf("请输入学生数学:"); getch();
scanf_s("%d", &max.math);
printf("请输入学生英语:");getch();
scanf_s("%d", &max.english);
fprintf(fp, "%s %d %d %d", max.name, max.chines, max.math, max.english);
rewind(fp);
fscanf_s(fp, "%s ", a);
printf("%s", a);
return 0;
}

运行报错说断言库错误
...全文
352 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gnglas 2019-10-13
  • 打赏
  • 举报
回复
引用 10 楼 提及的回复:
[quote=引用 9 楼 Gnglas 的回复:] 没人了吗,求解决啊 ,
你确定去掉了由 fgets 产生的终止符(\n)? [/quote] 嗯,是的,但是报错理由还是一样
提及 2019-10-13
  • 打赏
  • 举报
回复
https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/reference/getch?view=vs-2019 该搜搜 ``` 错误(活动) E0020 ``` 该点点
提及 2019-10-12
  • 打赏
  • 举报
回复
引用 9 楼 Gnglas 的回复:
没人了吗,求解决啊 ,
你确定去掉了由 fgets 产生的终止符(\n)?
Gnglas 2019-10-12
  • 打赏
  • 举报
回复
没人了吗,求解决啊 ,
Gnglas 2019-10-11
  • 打赏
  • 举报
回复
引用 4 楼 Gnglas 的回复:
[quote=引用 3 楼 自信男孩 的回复:]
#include<stdio.h>

typedef struct student
{
char New_name[20];
char name[20];
int chines, math, english;

}stu;

//main()
int main()
{
char a[20];
FILE* fp;
stu max;
printf("输入文件名:"); getch();
fgets(max.New_name, 20, stdin);
fp = fopen(max.New_name, "wt+");
if (!fp) {
fprintf(stderr, "open file %s error\n", max.New_name);
exit(0);
}
printf("输入学生名字:");
getch();
fgets(max.name, 20, stdin);
printf("请输入学生语文:");
getch();
scanf_s("%d", &max.chines);
printf("请输入学生数学:"); getch();
scanf_s("%d", &max.math);
printf("请输入学生英语:");getch();
scanf_s("%d", &max.english);
fprintf(fp, "%s %d %d %d", max.name, max.chines, max.math, max.english);
rewind(fp);
fscanf_s(fp, "%s ", a);
printf("%s", a);
return 0;
}

供参考~

建议加一下对打开文件返回值的判断,很可能是文件打开失败。
fgets可能会把'\n'加到New_name中,所以可能会导致打开失败
刚刚试了一下创建文件失败
[/quote]严重性 代码 说明 项目 文件 行 禁止显示状态 禁止显示状态
警告 C6387 “fp”可能是“0”: 这不符合函数“fprintf”的规范。 c语言文件格式化输入输出 A:\C语言程序\C语言文件格式化输入输出\源文件.C 67
错误(活动) E0020 未定义标识符 "FILE" c语言文件格式化输入输出 A:\c语言程序\c语言文件格式化输入输出\源文件.c 48
错误(活动) E0020 未定义标识符 "fp" c语言文件格式化输入输出 A:\c语言程序\c语言文件格式化输入输出\源文件.c 48
错误(活动) E0020 未定义标识符 "stdin" c语言文件格式化输入输出 A:\c语言程序\c语言文件格式化输入输出\源文件.c 51
错误(活动) E0020 未定义标识符 "stderr" c语言文件格式化输入输出 A:\c语言程序\c语言文件格式化输入输出\源文件.c 54
警告 C6387 “fp”可能是“0”: 这不符合函数“rewind”的规范。查看第 67 行以找出可能会发生此情况的前一位置 c语言文件格式化输入输出 A:\C语言程序\C语言文件格式化输入输出\源文件.C 68
警告 C6064 缺少“fscanf_s”的整型参数(对应于转换说明符“2”)。 c语言文件格式化输入输出 A:\C语言程序\C语言文件格式化输入输出\源文件.C 69
警告 C6387 “fp”可能是“0”: 这不符合函数“fscanf_s”的规范。查看第 67 行以找出可能会发生此情况的前一位置 c语言文件格式化输入输出 A:\C语言程序\C语言文件格式化输入输出\源文件.C 69
警告 C4013 “getch”未定义;假设外部返回 int c语言文件格式化输入输出 A:\c语言程序\c语言文件格式化输入输出\源文件.c 50
警告 C4013 “exit”未定义;假设外部返回 int c语言文件格式化输入输出 A:\c语言程序\c语言文件格式化输入输出\源文件.c 55
警告 C4473 “fscanf_s”: 没有为格式字符串传递足够的参数 c语言文件格式化输入输出 A:\c语言程序\c语言文件格式化输入输出\源文件.c 69
警告 C4996 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c语言文件格式化输入输出 A:\c语言程序\c语言文件格式化输入输出\源文件.c 52
Gnglas 2019-10-11
  • 打赏
  • 举报
回复
引用 3 楼 自信男孩 的回复:
#include<stdio.h>

typedef struct student
{
char New_name[20];
char name[20];
int chines, math, english;

}stu;

//main()
int main()
{
char a[20];
FILE* fp;
stu max;
printf("输入文件名:"); getch();
fgets(max.New_name, 20, stdin);
fp = fopen(max.New_name, "wt+");
if (!fp) {
fprintf(stderr, "open file %s error\n", max.New_name);
exit(0);
}
printf("输入学生名字:");
getch();
fgets(max.name, 20, stdin);
printf("请输入学生语文:");
getch();
scanf_s("%d", &max.chines);
printf("请输入学生数学:"); getch();
scanf_s("%d", &max.math);
printf("请输入学生英语:");getch();
scanf_s("%d", &max.english);
fprintf(fp, "%s %d %d %d", max.name, max.chines, max.math, max.english);
rewind(fp);
fscanf_s(fp, "%s ", a);
printf("%s", a);
return 0;
}

供参考~

建议加一下对打开文件返回值的判断,很可能是文件打开失败。
fgets可能会把'\n'加到New_name中,所以可能会导致打开失败
刚刚试了一下创建文件失败
自信男孩 2019-10-11
  • 打赏
  • 举报
回复
#include<stdio.h>

typedef struct student
{
char New_name[20];
char name[20];
int chines, math, english;

}stu;

//main()
int main()
{
char a[20];
FILE* fp;
stu max;
printf("输入文件名:"); getch();
fgets(max.New_name, 20, stdin);
fp = fopen(max.New_name, "wt+");
if (!fp) {
fprintf(stderr, "open file %s error\n", max.New_name);
exit(0);
}
printf("输入学生名字:");
getch();
fgets(max.name, 20, stdin);
printf("请输入学生语文:");
getch();
scanf_s("%d", &max.chines);
printf("请输入学生数学:"); getch();
scanf_s("%d", &max.math);
printf("请输入学生英语:");getch();
scanf_s("%d", &max.english);
fprintf(fp, "%s %d %d %d", max.name, max.chines, max.math, max.english);
rewind(fp);
fscanf_s(fp, "%s ", a);
printf("%s", a);
return 0;
}

供参考~

建议加一下对打开文件返回值的判断,很可能是文件打开失败。
fgets可能会把'\n'加到New_name中,所以可能会导致打开失败
Gnglas 2019-10-11
  • 打赏
  • 举报
回复
哦哦,我中午贴一下 ,
Gnglas 2019-10-11
  • 打赏
  • 举报
回复
引用 6 楼 棉猴 的回复:
#include<stdio.h>
#include <conio.h>
typedef struct student
{
char New_name[20];
char name[20];
int chines, math, english;

}stu;
int main()
{
char a[20];
FILE* fp;
stu max;
printf("输入文件名:");
_getch();
fgets(max.New_name, 20, stdin);
fp = fopen(max.New_name, "wt+");
printf("输入学生名字:");
_getch();
fgets(max.name, 20, stdin);
printf("请输入学生语文:");
_getch();
scanf_s("%d", &max.chines);
printf("请输入学生数学:"); _getch();
scanf_s("%d", &max.math);
printf("请输入学生英语:"); _getch();
scanf_s("%d", &max.english);
fprintf(fp, "%s %d %d %d", max.name, max.chines, max.math, max.english);
rewind(fp);
fscanf_s(fp, "%s", a, sizeof(a));
printf("%s", a);
return 0;
}

VS2015调试结果

正如楼上所说,fgets()会把"\n"也放到要创建的文件名中,这样可能在创建文件时报错!
我试着改了一下,这vs2019
还是一样没办法
Gnglas 2019-10-11
  • 打赏
  • 举报
回复
引用 6 楼 棉猴 的回复:
#include<stdio.h>
#include <conio.h>
typedef struct student
{
char New_name[20];
char name[20];
int chines, math, english;

}stu;
int main()
{
char a[20];
FILE* fp;
stu max;
printf("输入文件名:");
_getch();
fgets(max.New_name, 20, stdin);
fp = fopen(max.New_name, "wt+");
printf("输入学生名字:");
_getch();
fgets(max.name, 20, stdin);
printf("请输入学生语文:");
_getch();
scanf_s("%d", &max.chines);
printf("请输入学生数学:"); _getch();
scanf_s("%d", &max.math);
printf("请输入学生英语:"); _getch();
scanf_s("%d", &max.english);
fprintf(fp, "%s %d %d %d", max.name, max.chines, max.math, max.english);
rewind(fp);
fscanf_s(fp, "%s", a, sizeof(a));
printf("%s", a);
return 0;
}

VS2015调试结果

正如楼上所说,fgets()会把"\n"也放到要创建的文件名中,这样可能在创建文件时报错!
了解
棉猴 2019-10-11
  • 打赏
  • 举报
回复
#include<stdio.h>
#include <conio.h>
typedef struct student
{
char New_name[20];
char name[20];
int chines, math, english;

}stu;
int main()
{
char a[20];
FILE* fp;
stu max;
printf("输入文件名:");
_getch();
fgets(max.New_name, 20, stdin);
fp = fopen(max.New_name, "wt+");
printf("输入学生名字:");
_getch();
fgets(max.name, 20, stdin);
printf("请输入学生语文:");
_getch();
scanf_s("%d", &max.chines);
printf("请输入学生数学:"); _getch();
scanf_s("%d", &max.math);
printf("请输入学生英语:"); _getch();
scanf_s("%d", &max.english);
fprintf(fp, "%s %d %d %d", max.name, max.chines, max.math, max.english);
rewind(fp);
fscanf_s(fp, "%s", a, sizeof(a));
printf("%s", a);
return 0;
}

VS2015调试结果

正如楼上所说,fgets()会把"\n"也放到要创建的文件名中,这样可能在创建文件时报错!
铖邑 2019-10-10
  • 打赏
  • 举报
回复
把详细的错误信息贴出来
WIN-TC是一个TC2 WINDOWS平台开发工具,由 "TC256专题站"(http://tc256.cn.st) 与 "唯C世界"(http://www.vcok.com) 联合发布。该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。并提供一组相关辅助工具令你在编程过程中更加游刃有余,如虎添翼。WIN-TC简繁双语版可以 正常运行于98及其以上的简体及繁体WINDOWS操作系统上。   由于Turbo C 2.0(简称TC2.0)是基于MS-DOS的,存在诸如不支持鼠标操作、字体大小不能调整、文本复制步骤繁琐、必须另外启动UCDOS等中文环境才能支持中文输入输出等缺点,而这些缺陷或多或少影响了教学活动开展的效果。   基于这样的认识,一般在教学过程中使用了一个基于TC2.0编译内核开发出来的编译环境——Win-TC,它实际上是对TC2.0的一个封装。对于C语言的教学,使用该软件的主要优点有:   (1) 由于Win-TC是Windows程序,所以在其中进行鼠标操作、程序段的复制、中文输入输出等功能变得非常方便。   (2) 支持字体大小的调整和C程序中各种关键字符的变色显示,这样教师在课程上演示程序的时候可以适当将程序的字体放大,方便坐在后排的学生的观看,是教学C语言的良好编译软件之一。   (3) Win-TC消除了初学者设置工作目录的烦恼,自动设置好工作目录。程序编写好之后就可以直接编译运行。   (4) 中文界面,提示出错信息也是中文的,消除了我们的学生由于对英文的恐惧而造成的无法正确修改程序中的错误。   (5)借助工具,便 支持在运行结果中显示中文,这样在程序中就可以输出中文的提示语句了,但文件名还不支持中文。   (6)错误便于查找和修改。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧