我有一个c项目,我有严重的问题,我想打开文件并用“ * ”替换行号nb(nb是一个int)。这是我的代码可以帮助我一些吗?它告诉我我想要替换这个词的意思是指针指向想要的线但没有任何事情发生。请帮助我
#include <stdio.h>
int main( void )
{
FILE * f;
char ch[1024];
int i, nb;
i = 0;
scanf( "%d", &nb ) ;
f = fopen( "dict.txt", "r+t" );
while( i < nb )
{
fscanf( f, "%s", ch ) ;
i++;
}
printf( "%s", ch );
fprintf( f, "%s", "****" );
fclose( f );
}
答案 0 :(得分:1)
您已打开文件进行读写。根据{{3}}(我假设您正在使用Visual Studio的文件的r+t
模式):
当指定“ r + ”,“ w + ”或“ a + ”访问类型时,允许读取和写入(该文件据说是“更新”的开放。但是,当您从读取切换到写入时,输入操作必须遇到EOF标记。如果没有EOF,则必须使用对文件定位功能的干预调用。文件定位功能为 fsetpos , fseek 和快退。
要记住的其他一些事项:
fscanf
读取带%s
的字符串时,它一次只读取一个字,而不是整行。使用fgets
比使用fscanf
更容易阅读整行输入。fprintf(f, "%s", "****")
将仅替换行中的前四个字节。尝试这样的事情:
#include <stdio.h>
#include <string.h>
int main()
{
FILE * f;
char ch[1024];
int i,nb ;
fpos_t beginning_of_line;
i=0;
scanf("%d",&nb) ;
f = fopen("dict.txt", "r+t");
while (i<nb)
{
fgetpos(f, &beginning_of_line);
fgets(ch, 1024, f);
i++;
}
fseek(f, beginning_of_line, SEEK_SET); // return to beginning of line
for (i = 0; ch[i] != '\n'; ++i) {
fputc('*', f);
}
fclose(f);
}