Ana*_*ubi 3 c file writefile readfile
我一直试图同时从文件中读取和写入,并且我试图将text.txt内容中的所有选项卡替换为空格.这是我的代码:
int main()
{
FILE* filePtr = fopen("text.txt", "w+");
char c;
c = fgetc(filePtr);
fpos_t num;
while(c != EOF)
{
if(c == '\t')
{
fgetpos(filePtr, &num);
num--;
fsetpos(filePtr, &num);
fputc(' ', filePtr);
}
c = fgetc(filePtr);
}
}
Run Code Online (Sandbox Code Playgroud)
text.txt的内容如下:
嗨\ t我的名字\ t是\ t杰克!
当我运行此代码时,text.txt文件中的输出只是空格.那里没有人物.我该怎么做才能让替换按预期进行?
您的代码有三个主要问题:
使用mode打开文件会"w+" 截断文件(删除所有内容).您可以读取和写入它,但原始内容将丢失.模式"r+"将打开它进行读取和写入而不更改内容,并且文件位置最初位于文件的开头.
对类型值执行算术是不安全的fpos_t.无论如何它是不必要的; 有一种更简单的方法来移动文件位置的相对数量.
完成后不要关闭文件.
您的代码的这种变化适合我:
#include <stdio.h>
int main(void)
{
FILE* filePtr = fopen("text.txt", "r+");
char c;
while((c = fgetc(filePtr)) != EOF)
{
if(c == '\t')
{
fseek(filePtr, -1, SEEK_CUR);
fputc(' ', filePtr);
}
}
fclose(filePtr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)