C语言文件操作问题

# include <stdio.h>
# include <string.h>

void change(char * p);
void intput_file(char * p);
void printf_file(char * p);

int main(void)
{
char str[50];

printf("请输入字符串:");
gets(str);

change(str);

intput_file(str);

return 0;
}
void change(char * p)
{

strupr(p);

puts(p);
}

void intput_file(char * p)
{

FILE * fp;

char ch;

char str;

if((fp=fopen("1.txt","w+")) == NULL)
{

printf("打开文件出错");

}

fputs(p,fp);

putchar('\n');

printf("是否需要验证文件输入成功(y/n)");

ch=getchar();

if(ch == 'y')
{

while(!feof(fp))
{

str=fgetc(fp);
putchar(str);

}
}

fclose(fp);

}
为什么运行起来会死循环的

原因呢 是因为你的文件指针已经移动到了文件的末尾 你还在读取 所以会死循环
只需要在input_file函数的ch = getchar();
后面加一句
fseek(fp,0,SEEK_SET);
就好了。
上面那一句代码的意思是把文件指针移动到文件的开头位置。追问

fseek(fp,0,SEEK_SET); 这句中的 SEEK_SET是什么意思啊

追答

int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.

追问

太麻烦了 直接用rewind函数就可以了吧

追答

fseek麻烦?
rewind函数作用等同于 (void)fseek(stream, 0L, SEEK_SET);
原型: void rewind(FILE *stream);
fseek是标准文件操作函数,跟fopen,fclose,fread,fwrite一样。

亲 如果你没有问题了 求采纳~~~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-15
putchar('\n');

// fflush(fp);

rewind(fp); //fp文件指针定位到开始

printf("是否需要验证文件输入成功(y/n)");
相似回答