C语言scanf/fscanf/sscanf printf/fprintf/sprintf 函数对比

目录

Scanf/fscanf/sscanf

1.scanf

2.fscanf

3.sscanf

Printf/fprintf/sprintf

1.printf

2.fprintf

3.sprintf


Scanf/fscanf/sscanf

1.scanf

首先scanf我们的很熟悉,他就是从键盘上输入数据,准确的来说就是:

从标准输入(键盘)读取格式化的数据C语言scanf/fscanf/sscanf printf/fprintf/sprintf 函数对比_第1张图片

2.fscanf

而fscanf可以说是fscanf包含了scanf的功能,对于这个函数的定义是这样子的:

从所有的输入流读取格式化的数据。

C语言scanf/fscanf/sscanf printf/fprintf/sprintf 函数对比_第2张图片

int fscanf (FILE * stream, const char * format, ...);

        fscanf比scanf 多了一个FILE * 的参数,也就是打开的文件的地址参数,所有当我们进行使用的时候,我们可以先像scanf一样写出来,然后再在前面加上一个FILE * 的参数。

#define _CRT_SECURE_NO_WARNINGS 1
/* fscanf example */
#include 
int main()
{
	char str[80];
	float f;
	FILE* pFile;
	pFile = fopen("myfile.txt", "w+");
	fprintf(pFile, "%f %s", 3.1416, "PI");
	rewind(pFile);
	fscanf(pFile, "%f", &f);
	fscanf(pFile, "%s", str);
	fclose(pFile);
	printf("I have read: %f and %s \n", f, str);
	return 0;
}

3.sscanf

看下对这个函数的定义

C语言scanf/fscanf/sscanf printf/fprintf/sprintf 函数对比_第3张图片

int sscanf ( const char * s, const char * format ,... );

        从字符串中读取到格式化的数据,也就是说我们输入进去的数据,sscanf会转化成字符串的形式。也就是:

从字符串中读取一个格式化的数据。

        而对于参数我们可以再对比一下,与fscanf相比,sscanf将第一个参数改成了字符指针,也就是从字符指针中读一个数据,到后面的格式化数据里面去。

#define _CRT_SECURE_NO_WARNINGS 1
/* sscanf example */
#include 

int main()
{
	char sentence[] = "Rudolph is 12 years old";
	char str[20];
	int i;
	sscanf(sentence, "%s %*s %d", str, &i);//%*s 忽略s类型的值
	printf("%s -> %d\n", str, i);
	return 0;
}

Printf/fprintf/sprintf

1.printf

printf就是一个打印函数,从键盘上输出,对于它来说就是:

把格式化的数据到标准输出(屏幕)上

C语言scanf/fscanf/sscanf printf/fprintf/sprintf 函数对比_第4张图片

2.fprintf

fprintf比printf高级一点,除了可以实现printf的功能之外,还可以输出到文件等其它地方

他的定义是:把格式化的数据输出到所有输出流(屏幕/文件)上

C语言scanf/fscanf/sscanf printf/fprintf/sprintf 函数对比_第5张图片

int fprintf (FILE * stream, const char * format, ...);

fprintf和printf相差FILE *的参数,可以先按照printf的格式写,然后再加上参数,就可以很好的使用fprintf了。

下面例子,将从键盘输入的名字输出到文件当中:

#define _CRT_SECURE_NO_WARNINGS 1
/* fprintf example */
#include 
int main()
{
    FILE* pFile;
    int n;
    char name[100];
    pFile = fopen("myfile.txt", "w");
    for (n = 0; n < 3; n++)
    {
        puts("please, enter a name: ");
        gets(name);
        fprintf(pFile, "Name %d [%-10.10s]\n", n + 1, name);
    }
    fclose(pFile);
    return 0;
}

3.sprintf

使用相同的文本组成字符串,但不打印其内容,而是存储在str指向的缓冲区中的C字符串中。

定义为:把格式化的数据输出转换成字符串。

C语言scanf/fscanf/sscanf printf/fprintf/sprintf 函数对比_第6张图片

int sprintf ( char * str, const char * format, ...);

        对于sprintf,与fprintf相比将文件指针改成了字符指针,即从后面的输出的格式化中读数据,存放到前面的字符指针里面去。

 下面例子,将从输出内容存放到字符串中:

#define _CRT_SECURE_NO_WARNINGS 1
/* sprintf example */
#include 
int main()
{
	char buffer[50];
	int n, a = 5, b = 3;
	n = sprintf(buffer, "%d plus %d is %d", a, b, a + b);
	printf("[%s] is a string %d chars long\n", buffer, n);
	puts(buffer);
	return 0;
}

你可能感兴趣的:(c语言,算法,开发语言)