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;
}

运行报错说断言库错误
...全文
459 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
把详细的错误信息贴出来

70,020

社区成员

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

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