(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()函数,
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函数的区别