读写函数
fputs与fgets函数
fgets的功能是在文件中读一行字符串。它有三个参数。
例如,fgets(a,n,in);其中a是一个char型数组用于存放读取的字符串,n表示读取n~1个字符,in是文件读入指针。
fgets函数会在读入的数据末尾加上一个空字符以构成一个字符串。
fgets与gets的不同之处在于,fgets读取到换行符后不会将其省略,而gets读到换行符时会退出,并会将换行符略去。
fputs的功能是在文件中写入一行字符串。它有两个参数。
例如,fputs(a,out);其中a是一个要输出的char型数组,out是文件输出指针。
fputs与puts的不同之处是fputs在打印时并不添加换行符。
参考程序如下所示:
1 //fgets and fputs 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 FILE *in=fopen("i.txt","rb"); //定义文件读入指针 8 FILE *out=fopen("o.txt","wb"); //定义文件输出指针 9 char a[9]; 10 fgets(a,10,in); 11 fputs(a,out); 12 return 0; 13 }
getc与putc函数
getc函数的功能是从文件中读出一个字符。
常用的判断文件是否读取结束的语句为:(ch=getc(fp))!=EOF。EOF为文件结束标志。文件也可以被理解为一种流,故当文件输入指针为in时,getc(in)就等同于getchar()了。
putc函数的功能是把字符ch写到文件中去。
如果文件输出指针为out,则putc(out)就等同于putchar()了。
参考程序如下所示:
1 //getc and putc 2 #include <stdio.h> 3 4 int main() 5 { 6 FILE *in=fopen("i.txt","rb"); 7 FILE *out=fopen("o.txt","wb"); 8 char c; 9 c=getc(in); 10 putc(c,out); 11 return 0; 12 }
fgetc与fputc函数
fgetc函数的功能是从fp的当前位置读取一个字符。
例如,fgetc(in);其中in是文件读入指针。
fputc函数的功能是将ch写入fp当前指定位置。
例如,fputs(ch,out);其中ch是要输出的字符,out是文件输出指针。
fscanf与fprintf函数
fscanf的功能是按照指定格式从文件中出读入数据。
fprintf的功能是将格式化数据(这里的格式化即按照指定格式)写入文件中。
有一道题,要求读取一行字符串,可是该字符串包含有空格,例如“I am a student”,如果使用通常的读写方法,当读到空格时,读写语句就会认为该字符串已经结束。那么,有什么好的办法读取含空格的字符串呢?
在实际应用中,有下列几种方法可以读入包括空格符的字符串。
1.用gets读取。
1 //gets读字符串 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 char a[100]; 8 gets(a); 9 puts(a); 10 system("pause"); 11 return 0; 12 }
2.用getline(cin,string)来读入一行包含空格符的字符串。
1 //getline读字符串 2 #include <iostream> 3 using namespace std; 4 int main() 5 { 6 string str; 7 getline(cin,str); 8 cout<<str; 9 system("pause"); 10 return 0; 11 }
3.用cin.getline(字符指针,字符个数,结束符)。结束符默认是'\n'。
1 //cin.getline读字符串 2 #include <iostream> 3 using namespace std; 4 main() 5 { 6 char a[80]; //注意与上一个程序数据类型的区别 7 cin.getline(a,80); 8 cout<<a; 9 system("pause"); 10 return 0; 11 }
4.用循环语句来判断是否读完一行,否则读取这一字符。
1 //循环语句读字符串 2 #include <iostream> 3 using namespace std; 4 main() 5 { 6 char c; 7 while((c=getchar())!='\n') //此句前面必要加括号,而且不能在freopen下使用 8 cout<<c; 9 system("pause"); 10 return 0; 11 }
Ch=fin.get();这是在文件流读写中使用的,是获得单个字符。
1 //fin.get()使用 2 #include <iostream> 3 #include<fstream> 4 using namespace std; 5 int main() 6 { 7 int a,b,c,space; 8 ifstream fin("in.txt"); //输入形式: a b c 9 ofstream fout("out.txt"); //输出三个个位数的积到文件out.txt 10 a=fin.get()-'0'; //特别注意该函数是获取一个字符包括空格符 11 space=fin.get(); 12 b=fin.get()-'0'; 13 space=fin.get(); 14 c=fin.get()-'0'; 15 fout<<a*b*c; 16 fin.close(); 17 fout.close(); 18 return 0; 19 }