#include<io.h>
#include<string.h>
#include<stdio.h>
#include<iostream.h>
int main(){
int h;
h=_creat("xin.txt", 0666);
_creat("he.txt",0666);
FILE *fp;
char string[8];
if((fp=fopen("xin.txt","rw"))==NULL)
{printf("no");
}
printf("enter the content of the txt:");
while(strlen(gets(string))>0)
{
fputs(string,fp);
fputs("\n",fp);
}
printf("\nwhat you enter are:\n");
while(fgets(string,81,fp)!=NULL)
printf("%s",string);
fclose(fp);
return 1;
}
本来的意图是 从键盘输入字符,把字符存到文件中,同时在屏幕上显示存取到文件里面的字符的内容. 但是结果并不令人满意..虽然存到文件中了,但是并没有把内容给输出出来,也就是说 ,在
while(fgets(string,81,fp)!=NULL)
printf("%s",string);
这里有问题 . 看了看MSDN中关于流方面的函数 ,先看两个关键函数 fopen和fclose .
fopen的函数声明为:
FILE *fopen( const char *filename, const char *mode ); 它打开一个文件同时返回一个指向这个文件的指针 . 如果打开文件有错误,将返回一个NULL指针 .
Fclose函数声明为 :
int fclose( FILE *stream ); 它关闭了FILE*流 . 但是并不是说再执行了fclose之后,流中的数据才会写回到文件中 , 任何对流进行的操作,实际都是对文件进行的操作 . 当正常关闭一个流的时候, 函数返回 0 .
下面我们来看看获取输入的函数 :
char *gets( char *buffer );函数从标准输入设备键盘上获得一行的输入 .
int fputs( const char *string, FILE *stream );函数向一个流中写入一个字符串.并把流指针向后移动相应位置 . 如果函数成功执行,则返回一个非负的值,否则返回EOF .
char *fgets( char *string, int n, FILE *stream );函数从一个流中读取字符串,并把流指针移到后面没读取的位置 . 如果发生错误或者读取到文件末端,函数会返回一个NULL .
为了便于调试信息,我把程序改为:
int main(){
int h;
h=_creat("xin.txt", 0666);
_creat("he.txt",0666);
FILE *fp;
char string[8];
if((fp=fopen("xin.txt","w"))==NULL)
{printf("no");
}
printf("After fopen ,position is %d\n ",ftell(fp));
printf("enter the content of the txt:");
while(strlen(gets(string))>0)
{
fputs(string,fp);
fputs("\n",fp);
printf("After fputs, position is %d\n",ftell(fp));
}
printf("\nwhat you enter are:\n");
//fseek(fp,0,SEEK_SET);
// rewind(fp);
printf("Before output to screen ,position is %d\n",ftell(fp));
fclose(fp);
FILE *fp2=fopen("xin.txt","r");
while(fgets(string,81,fp2)!=NULL)
{
printf("After fgets ,position is %d\n",ftell(fp2));
printf("%s",string);
}
fclose(fp2);
return 1;
}
这时候程序工作正常 . 原来是 fopen的模式的问题 . 应该改为 w+ ,同时要把原来的流的指针位置返回到 0 .
问题解决, 代码如下 :
int main(){
int h;
h=_creat("xin.txt", 0666);
_creat("he.txt",0666);
FILE *fp;
char string[8];
if((fp=fopen("xin.txt","w+"))==NULL)
{
printf("no");
}
printf("After fopen ,position is %d\n ",ftell(fp));
printf("enter the content of the txt:");
while(strlen(gets(string))>0)
{
fputs(string,fp);
fputs("\n",fp);
printf("After fputs, position is %d\n",ftell(fp));
}
printf("\nwhat you enter are:\n");
//fseek(fp,0,SEEK_SET);
rewind(fp);
printf("Before output to screen ,position is %d\n",ftell(fp));
while(fgets(string,81,fp)!=NULL)
{
printf("After fgets ,position is %d\n",ftell(fp));
printf("%s",string);
}
fclose(fp);
return 1;
}
[后记] 这个程序的主要问题在于对fopen打开文件的模式的了解和理解上,其次是关于流指针的问题 .