[C]IO相关API

(1)fopen,fread,fwrite相关函数
以上三个API主要用于读取二进制相关的数据,可以读取一个结构体,如下示例

struct{
	short count;
	long total;
	char name[5];
}item;
if(fwrite(&item,sizeof(item),1,fp) != 1)
	printf("fwrite error\n")


以下示例,其中testfile为当前目录下的一个文件,以下程序是将testfile文件里的内容输出到标准输出

#include <stdio.h>
#include <unistd.h>
int main()
{
	FILE *fp;
	fp = fopen("testfile","r");
	char buf[1024];
	int n;
	printf("start to read\n");
	while ((n=fread(buf,1,sizeof(buf),fp))>0)
		fwrite(buf,1,n,stdout);
	fclose(fp);
	return 0;
}

(2)fgets() gets() fputs() puts()函数
原型:char *fgets(char *restrict buf,int n,FILE *restrict fp)
char *gets(char *buf)
以上四个函数是每次一行的IO函数,fgets从标准fopen()打开的文件流读取,gets从标准输入读取,以下示例:

#include <stdio.h>
#include <unistd.h>
int main()
{
	FILE *fp;
	fp = fopen("testfile","r");
	char buf[1024];
	char *str;
	str=fgets(buf,1024,fp);
	str = gets(buf);
	fclose(fp);
	return 0;
}

(3)getc(FILE *fp)
   putc(int c,FILE *fp)

  以上函数用于输入或者输出一个字符,如下示例:

  int c;
  while(c=getc(stdin) !=EOF)
	if(putc(c,stdout)==EOF)
		printf("out put error");


 

(4)scanf()函数,

scanf函数详细解释

int main(){
    int n,i,test;
    while(scanf("%d",&n)!=EOF && n > 0){
        for(i=0 ; i<n ; i++){
            scanf("%d",&test);
            printf("%d\n",getNumber(test));
        }
    }
    return 0;
}


char str[20];

注意,scanf("%s",str);中的%s读取一串没空白字符,当发现空白的时候输入终止,字符串结尾自动加上NUL结尾字符。

#include "stdio.h" 
 int main() 
 { 
     char string[50]; 
     
      /*scanf("%s",string);不能接收空格符*/ 
      scanf("%[^/n]",string); 
      printf("%s/n",string); 
      return 0; 
 }


scanf函数的控制串由三类字符构成:
1。格式化说明符; 
2。空白符; 
3。非空白符;
(A) 格式化说明符
 %p                 读入一个指针 
 %u                 读入一个无符号十进制整数 
 %n                 至此已读入值的等价字符数 
 %[]                扫描字符集合 
 %%                 读%符号 
(B) 空白字符
 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。
(C) 非空白字符
 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。

 例1.
 #include "stdio.h" 
 int main(void) 
 { 
 int a,b,c; 


 scanf("%d%d%d",&a,&b,&c); 
 printf("%d,%d,%d/n",a,b,c);
 return 0; 
 }  
运行时按如下方式输入三个值:
3□4□5 ↙(输入a,b,c的值)
3,4,5 (printf输出的a,b,c的值)
   (1) &a、&b、&c中的&是地址运算符,分别获得这三个变量的内存地址。 
    (2) "%d%d%d"是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。 
       以下是合法输入方式: 
       ① 3□□4□□□□5↙ 
       ② 3↙ 
          4□5↙ 
       ③ 3(tab键)4↙ 
          5↙


例2.
 #include "stdio.h" 
 int main(void) 
 { 
 int a,b,c;
 scanf("%d,%d,%d",&a,&b,&c); 
 printf("%d,%d,%d/n",a,b,c);
 return 0; 
 }  
运行时按如下方式输入三个值:
3,4,5 ↙(输入a,b,c的值)
 或者
3,□4,□5 ↙(输入a,b,c的值)
3,□□□4,□5 ↙(输入a,b,c的值) 
 ...... 
都是合法的,但是","一定要跟在数字后面,如: 
3□,4,□5 ↙就非法了,程序出错。



(5),open read write函数和fopen fread fwrite函数的区别

点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值