0
我試圖用新字符逐個交換文件中的現有字符。新字符是通過從ASCII碼中減去1來操作現有字符而獲得的。該文件已經存在與文本,但由於某種原因,我最終得到一個無限循環。我究竟做錯了什麼?C - FILE IO讀取和寫入錯誤
#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;
}
CNC中 我改變的C數據類型從字符爲int,但問題仍然存在。但是,我的問題已通過在fputc()調用後添加fseek(fp,0,SEEK_CUR)解決。我相信Jonathan Leffler的評論應該成爲一個答案,因爲這個問題沒有從另一個問題中得到回答。
[該'fgetc'功能](http://en.cppreference.com/w/c/io/fgetc)返回一個'int'。這是有原因的。我建議你相應地改變你的變量'c'。 –
當你從閱讀轉變爲寫作,以及從寫作轉變爲閱讀時,你必須定位兩者。在fputc()調用之後添加'fseek(fp,0,SEEK_CUR)'。 (爲什麼?這個標準是這麼說的!參見'fopen()'描述'+'模式:但是,輸出不應該直接跟隨輸入,而不需要對fflush函數或文件定位函數('fseek ', 'fsetpos'或'rewind'),並且輸入不應該直接跟在輸出之後,除非輸入操作遇到文件結束,否則不會對輸入文件進行中間調用 _ –
哎呀,我忘了fgetc返回一個int,我把c的數據類型改爲int,但問題仍然存在,但是在fputc()調用後添加fseek(fp,0,SEEK_CUR)實際上解決了我的問題。 – Gizdich