请教一个C语言文件操作的问题
int main(){
FILE* fp;
errno_t error;
char ch;
char temp = {};
int i = 0;
int usernb = 0;
char name[] = "asd";
error = fopen_s(&fp, "UserData.txt", "r+");
fflush(stdin);
if (fp == NULL)
{
return 1;
}
fflush(stdin);
while ((ch = fgetc(fp)) != EOF)//////统计用户数
{
if (ch == '#')
{
usernb++;
}
}
fflush(stdin);
rewind(fp);
for (int j = 0; j < usernb; j++)
{
ch = fgetc(fp);
while (ch != ';')
{
temp = ch;
i++;
ch = fgetc(fp);
}
temp = '\0';
if (strcmp(temp, name) == 0)
{
ch = fgetc(fp);
while (ch != ';')
{
ch = fgetc(fp);
}
ch = fgetc(fp);
while (ch != ';')
{
ch = fgetc(fp);
}
ch = fgetc(fp);
while (ch != ';')
{
if ((ch - 48) == 3)
{
fseek(fp, -2, SEEK_CUR);
fputs("", fp);
}
ch = fgetc(fp);
}
//fprintf(fp, ";");
fclose(fp);
return 1;
}
while (ch != '\n')
{
ch = fgetc(fp);
}
}
fclose(fp);
return 0;
}
写的一个选课系统读取更改文件的代码,运行前文件是这样的:
asd;asd;mylove;1+2+3+4; 2;7;#
运行后文件是这样的:
asd;asd;mylove;1+2d;; 2;7;#
似乎多了个d; 经过我的实验,更改fputs("", fp);里” “中的空格数为一个空格,文件会变成这样:
asd;asd;mylove;1+2 sd;; 2;7;#
经过继续实验,发现多出来的字符和 asd; 相关,这刚刚好是程序之前出现过的字符{:10_266:}
如果我把name变量和文件开头改为 123; 发现多出来的字符又和 123; 相关,我考虑是不是缓冲区的问题,在一些地方添加了fflush(stdin);但是没有用(可能没加在正确的位置?)
救救我{:10_254:} 运行后文件是什么样的才正确?
人造人 发表于 2022-3-13 00:58
运行后文件是什么样的才正确?
asd;asd;mylove;1+2+4; 2;7;#
大概这样 HQWQF 发表于 2022-3-13 08:48
大概这样
fseek(fp,-2, SEEK_CUR);
fputs("", fp);
fseek(fp,2, SEEK_CUR); jhq999 发表于 2022-3-13 09:18
非常感谢,这样就好了{:10_266:}
方不方便稍微讲一下为什么缺一行fseek不行呢 HQWQF 发表于 2022-3-13 09:49
非常感谢,这样就好了
方不方便稍微讲一下为什么缺一行fseek不行呢
大概需要刷新一下吧{:5_93:}
反正我处理文件时很少r+;都是读入内存,然后处理内存数据,再重新写入
页:
[1]