gpt4 book ai didi

C - 文件 IO 读写错误

转载 作者:行者123 更新时间:2023-11-30 16:56:47 25 4
gpt4 key购买 nike

我正在尝试将文件中的现有字符与新字符一一交换。新字符是通过从 ASCII 代码中减去 1 来操作现有字符而获得的。该文件已经存在并带有文本,但由于某种原因我最终得到了无限循环。我做错了什么?

#include <stdio.h>

int main()
{
FILE *fp = fopen("myfile.txt", "r+");

if (fp == NULL)
printf("File cannot be opened.");
else
{
// Used for retrieving a character from file
int c;

// Pointer will automatically be incremented by one after executing fgetc function
while ((c = fgetc(fp)) != EOF)
{
// Decrement pointer by one to overwrite existing character
fseek(fp, ftell(fp)-1, SEEK_SET);

// Pointer should automatically increment by one after executing fputc function
fputc(c-1, fp);

printf("%c\n", c);
}

fclose(fp);
}

return 0;
}

-编辑-我将 c 的数据类型从 char 更改为 int,但问题仍然存在。但是,通过在 fputc() 调用后添加 fseek(fp, 0, SEEK_CUR) 解决了我的问题。我相信 Jonathan Leffler 的评论应该成为答案,因为其他问题没有回答此类问题。

最佳答案

试试这个

#include <stdio.h>

int main(void){
FILE *fp = fopen("myfile.txt", "r+");

if (fp == NULL) {
printf("File cannot be opened.");
return -1;
}

int c;
long pos = ftell(fp);
while ((c = fgetc(fp)) != EOF){
fseek(fp, pos, SEEK_SET);//In the case of text file Do not operate the offset.
fputc(c-1, fp);
fflush(fp);//To save the output.
pos = ftell(fp);

printf("%c\n", c);
}
fclose(fp);

return 0;
}

关于C - 文件 IO 读写错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39811070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com