|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);
复制代码
|
|