鱼C论坛

 找回密码
 立即注册
查看: 928|回复: 5

[已解决]请教一个C语言文件操作的问题

[复制链接]
发表于 2022-3-13 00:38:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int main()
{
    FILE* fp;
    errno_t error;
    char ch;
    char temp[32] = {};
    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[i] = ch;
            i++;
            ch = fgetc(fp);
        }
        temp[i] = '\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+2  d;;               2;7;#

似乎多了个d;    经过我的实验,更改fputs("  ", fp);里” “中的空格数为一个空格,文件会变成这样:
asd;asd;mylove;1+2 sd;;               2;7;#

经过继续实验,发现多出来的字符和 asd; 相关,这刚刚好是程序之前出现过的字符
如果我把name变量和文件开头改为 123; 发现多出来的字符又和 123; 相关,我考虑是不是缓冲区的问题,在一些地方添加了fflush(stdin);但是没有用(可能没加在正确的位置?)
救救我
最佳答案
2022-3-13 09:18:30
                                        fseek(fp,-2, SEEK_CUR);
                                        fputs("  ", fp);
                                        fseek(fp,2, SEEK_CUR);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-13 00:58:58 | 显示全部楼层
运行后文件是什么样的才正确?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-13 08:48:33 | 显示全部楼层
人造人 发表于 2022-3-13 00:58
运行后文件是什么样的才正确?
asd;asd;mylove;1+2  +4;               2;7;#

大概这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-13 09:18:30 | 显示全部楼层    本楼为最佳答案   
                                        fseek(fp,-2, SEEK_CUR);
                                        fputs("  ", fp);
                                        fseek(fp,2, SEEK_CUR);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-13 09:49:42 | 显示全部楼层

非常感谢,这样就好了
方不方便稍微讲一下为什么缺一行fseek不行呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-13 12:11:34 | 显示全部楼层
HQWQF 发表于 2022-3-13 09:49
非常感谢,这样就好了
方不方便稍微讲一下为什么缺一行fseek不行呢

大概需要刷新一下吧
反正我处理文件时很少r+;都是读入内存,然后处理内存数据,再重新写入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 13:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表