您的位置:首页 > 其它

scanf sscanf fscanf fgets printf sprintf snprintf 等函数

2015-06-13 00:04 471 查看
int scanf(const char *format, ...);
int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
int getchar(void);
char *gets(char *s);
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size,  const  char  *format,...);
int sscanf(const char *str, const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
这些函数都在#include <stdio.h>头文件中


我对这些函数的理解

1 scanf函数
int num;
char buf[20] = {0};
scanf("%s",buf)
scanf("%d",&num)
scanf("%c",&buf[3])
这是读取的形式
scanf(" %d",num);在%d前面留出一个空格的作用是过滤到没有用的字符  比如在输入缓存区的应用
scanf("%5d",&num)等

2fgetc函数是在一个文件流中依次读取一个字符
如
#include <stdio.h>

int main( void )
{
FILE *fp = NULL;
fp = fopen( "./student","r" );
char c;
while( (c = fgetc(fp)) != EOF )
printf("%c",c);
return 0;
}
3fgets 就是从stream流文件中读取 size个字节放在 char *s指向的空间中
4getc是从流入读取内容与fgetc用法相同。
5getchar()从标准输入读取一个字符 通常用来暂停程序
6gets函数从标准输入读取一串字符串放入s所指向的内存

这4个函数重点说下
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size,  const  char  *format,...);
int sscanf(const char *str, const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);

sprintf函数一般用于把数字转化为字符串
如 sprintf(buf,"%d",num) 就把num以字符串形式放到buf中
snprintf 就是多了一个\0  如
i = snprintf(buf,9,"%012d",12345);
printf("buf=%s,i=%d\n",buf,i);
结果为 00000001   12
snprintf返回的是格式化后的字符串长度  则为12  所以i 为12
又因为输出的结果是000000012345  但是只把9个输入到buf中并且最后一个是\0 所以是00000001

sscanf 是从字符串中输入 fscnaf是用文件中输入  和scanf使用的格式是相同的

/*

char src[20] = "123456789";
char buf[20] = {0};
sscanf(src,"%5s",buf);
printf("%s\n",buf);
结果为12345
*/

/*

char src[20] = "123/456789";
char buf[20] = {0};
sscanf(src,"%[^/]",buf);
printf("%s\n",buf);
结果为123
*/

/*
char src[20] = "123abcABC";
char buf[10] = {0};
char buf1[10] = {0};
char buf2[10] = {0};
sscanf(src,"%[0-9]%[a-z]%[A-Z]",buf,buf1,buf2);
printf("buf=%s buf1=%s buf2=%s\n",buf,buf1,buf2);
结果为 buf=123 buf1=abc buf2=ABC
*/

/*
char src[20] = "iso<android>wp";
char buf[20] = {0};
sscanf(src,"%*[^<]<%[^>]",buf);
printf("%s\n",buf);
结果为android
*/

/*-------------------------------------
char src[20] = "isoVSandroid";
char buf[20] = {0};
char buf1[20] = {0};
sscanf(src,"%[a-z]VS%[a-z]",buf,buf1);
printf("%s\n",buf);
printf("%s\n",buf1);
结果为buf=iso
buf1=android
*/

/*
sixth stats
char src[20] = "123abcABC";
char buf[10] = {0};
sscanf(src,"%[^A-Z]",buf);
printf("%s\n",buf);
结果为123abc
*/

/*--------------------------------------------
char src[20] = "iso VS android";
char buf[20] = {0};
char buf1[20] = {0};
char buf2[20] = {0};
sscanf(src,"%s %*s  %s",buf,buf1,buf2);
printf("%s\n",buf);
printf("%s",buf1);
printf("%s\n",buf2);
结果为 buf=iso buf1是空 %*s代表过滤掉这个字符串
buf2=android
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: