LinuxC简谈之输入输出(三)

在LinuxC中(gcc编译器)关于输入输出的函数有很多,例如:scanf()、printf()、gets()、puts()、putchar()、getchar()、fscanf()、fprintf()、fgets()、fputs()等等。在这我分享一下我对这些函数的总结。

三、文件输入输出函数

1、文件顺序写函数:fprintf()、fputs()和fputc()

fprintf()函数作用是向一个文件写入数据,函数原型为intfprintf(FILE *stream, char *format, <variable-list>),返回值是实际写入文件的字节数,返回负数,表示写入错误。用法与printf()类似,只是一个是向文件写,一个是向屏幕打印。以向标准输出写为例,其实功能和printf()一样了。

例如:

int a = 123;
char str[] = "abc";
int ret = fprintf (stdout,"a = %d\nstr = %s\n",a,str);
printf ("ret = %d\n",ret);



fputs()函数作用是向一个文件写入字符串,函数原型是intfputs(char *string, FILE *steam),功能与puts()类似,返回非负整数时代表写入成功,否则写入失败;fputc()函数作用是向一个文件写入字符,函数原型是int fputc(int ch, FILE *steam),功能与putchar()类似,返回写入的字符的值表示写入成功,写入错误则返回EOF。以向标准输出写为例。

例如:

char str[] = "abcde";
int ret = fputs(str,stdout);
fputs("\n",stdout);
fputs("abcdefg",stdout);
fputs("\n",stdout);
printf ("ret = %d\n",ret);



char ch = 'A';
int ret = fputc(ch,stdout);
fputc('\n',stdout);
printf ("ret = %d\n",ret);



2、文件顺序读函数:fscanf()、fgets()和fgetc()

fscanf()函数作用是从一个文件中读取数据,函数原型为intfscanf(FILE *stream, char *format, <address-list>),返回-1表示读取失败。作用与scanf()类似,只不过前者从文件读取,后者从屏幕读取,如果以向标准输入读为例,两者功能相同。

例如:

char ch;
int a;
fscanf(stdin,"%c",&ch);
fscanf(stdin,"%d",&a);
printf ("ch = %c\na = %d\n",ch,a);



fgets()函数作用是向一个文件读取字符串,函数原型是charfgets(char *string, int n, FILE *steam),功能与gets()类似,返回string指针时代表读取成功,否则读取失败,读取成功后,在字符串末尾自动添加一个’\0’,作为字符串结尾;fgetc()函数作用是向一个文件读取字符,函数原型是int fgetc(FILE *steam),功能与getchar()类似,返回读取的字符的值表示读取成功,读取错误或读到文件结尾,返回EOF。以向标准输入读为例。

例如:

char str[10];
fgets(str,10,stdin);
printf ("str = %s",str);




char ch;
ch = fgetc(stdin);
printf ("ch = %c\n",ch);



需要注意的是fgets()这个函数。在读取字符串时,虽然会读取空格,也可以限制长度,不会造成溢出,好像很方便。但是fgets()会读取换行符,我们在屏幕输入字符串后,键入回车,fgets()开始读取,这时,它会把换行符也读入,这显然不符合我们的想法。

可以这样解决:

int i = 0;
while (str[i])
{
	if (str[i] == '\n')
	{
		str[i] = '\0';
		break;
	}
	i++;
}


所以我们在编程时,一定要使用最适合当时情况的函数,C语言不存在万能的函数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值