|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
void inputinfo()
{
FILE* fp;
int i = 0;
if ((fp = fopen_s(&fp, "C:\\Users\\30371\\Desktop\\vs 2022\\C#practise\\Teachersinfo.txt", "wb")) == NULL)
{
printf("无法打开文件!\n");
return;
}
fprintf(fp, "%d\n", n);
while (i < n)
{
fprintf(fp, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", teacher[i].ID, teacher[i].name, teacher[i].sex, teacher[i].college, teacher[i].birth, teacher[i].edu, teacher[i].position, teacher[i].wage, teacher[i].tel);
i++;
}
fclose(fp);
}
运行一直显示无法打开文件
你好呀,看起来你在编写一个保存教师信息到文件的程序,但遇到了文件无法打开的问题。让我来帮助你分析和解决这个问题。
首先,你的代码使用 `fopen_s` 函数打开文件,但使用方式有些问题。正确的使用 `fopen_s` 的方式是:
errno_t fopen_s(FILE** pFile, const char* filename, const char* mode);
让我们先看看你现有的代码:
void inputinfo()
{
FILE* fp;
int i = 0;
if ((fp = fopen_s(&fp, "C:\\Users\\30371\\Desktop\\vs 2022\\C#practise\\Teachersinfo.txt", "wb")) == NULL)
{
printf("无法打开文件!\n");
return;
}
fprintf(fp, "%d\n", n);
while (i < n)
{
fprintf(fp, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", teacher.ID, teacher.name, teacher.sex, teacher.college, teacher.birth, teacher.edu, teacher.position, teacher.wage, teacher.tel);
i++;
}
fclose(fp);
}
如你所见,`fopen_s` 返回一个 `errno_t` 类型的错误码,而不是一个文件指针,所以你的条件判断语句是有问题的。正确的做法如下:
#include <stdio.h>
// 假设teacher结构体与n已经定义好
void inputinfo()
{
FILE* fp;
errno_t err;
// 使用fopen_s打开文件
err = fopen_s(&fp, "C:\\Users\\30371\\Desktop\\vs 2022\\C#practise\\Teachersinfo.txt", "wb");
if (err != 0)
{
printf("无法打开文件!\n");
return;
}
// 假设n为要写入的教师数量,并且教师信息保存在teacher结构体中
fprintf(fp, "%d\n", n);
for (int i = 0; i < n; i++)
{
fprintf(fp, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
teacher[i].ID,
teacher[i].name,
teacher[i].sex,
teacher[i].college,
teacher[i].birth,
teacher[i].edu,
teacher[i].position,
teacher[i].wage,
teacher[i].tel);
}
fclose(fp);
}
注意这里几点:
1. `errno_t err` 用来接收 `fopen_s` 的返回值。
2. 当 `fopen_s` 成功时,`err` 值应为 0。
3. 根据你假设的 `teacher` 是个数组,我们依次写入每位教师的信息。
最后,如果你还是无法打开文件,请检查以下几点:
1. 确保路径是正确的,文件夹确实存在。
2. 检查文件是否被其他程序占用。
3. 检查权限问题,确保你的程序有写入该目录的权限。
希望这个能帮助你顺利解决问题,祝你编程愉快!如果有其他问题,欢迎随时提问~
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|