马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);但是没有用(可能没加在正确的位置?)
救救我
fseek(fp,-2, SEEK_CUR);
fputs(" ", fp);
fseek(fp,2, SEEK_CUR);
|