最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言scanf,fscanf和sscanf的區(qū)別

 更新時間:2021年10月12日 08:52:39   作者:梁同學(xué)今天不想敲代碼  
每種語言都對正則表達(dá)式有著不同程度的支持,在C語言中,有輸入功能的這三個函數(shù)對正則表達(dá)式的支持并不強大,但是我們還是有必要了解一下

一.scanf,fscanf和sscanf

1.scanf

首先scanf我們的很熟悉,他就是從鍵盤上輸入數(shù)據(jù),準(zhǔn)確的來說就是:

從標(biāo)準(zhǔn)輸入(鍵盤)讀取格式化的數(shù)據(jù)。

int main()
{
	int x = 0;
	scanf("%d", &x);
	return 0;
}

2.fscanf

而fscanf就比scanf高級了一點,可以說是fscanf包含了scanf的功能,對于這個函數(shù)的定義是這樣子的:

從所有的輸入流讀取格式化的數(shù)據(jù)。

我們可以查看一下fscanf-cpulspuls中的解釋和參數(shù):

釋義:從流中讀取數(shù)據(jù),并根據(jù)參數(shù)格式將它們存儲到附加參數(shù)所指向的位置。附加參數(shù)應(yīng)指向格式字符串中的相應(yīng)格式說明符指定的類型已分配的對象。

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

這里的參數(shù)如果看不懂,我們就可以進行對比去學(xué)習(xí),我們可以打開scanf的說明去看一下對比一下:

實際上fscanf就多了一個FILE * 的參數(shù),也就是打開的文件的地址參數(shù),所有當(dāng)我們進行使用的時候,我們可以先像scanf一樣寫出來,然后再在前面加上一個FILE * 的參數(shù)就好了。

例子:

我們可以打開文件,在輸入流中讀取到數(shù)據(jù),然后打印出來看看:

//fscanf
struct S
{
	int n;
	double d;
};
int main()
{
	struct S s = {0};
	FILE* pf = fopen("data.txt", "r");//文本文件data.txt
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//讀文件
	fscanf(pf, "%d %lf", &(s.n), &(s.d));
	printf("%d %lf\n", s.n, s.d);
	//關(guān)閉文件
	fclose(pf);
	pf = NULL;
}

3.sscanf

老規(guī)矩,我們查一下這個函數(shù)的定義:

這里的意思就是從字符串中讀取到格式化的數(shù)據(jù),也就是說我們輸入進去的數(shù)據(jù),sscanf會轉(zhuǎn)化成字符串的形式。也就是:

從字符串中讀取一個格式化的數(shù)據(jù)。

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

而對于參數(shù)我們可以再對比一下,前面的fscanf就是多了一個FILE *的指針,而現(xiàn)在這里就是改成了字符指針,也就是從字符指針中讀一個數(shù)據(jù),到后面的格式化數(shù)據(jù)里面去。

例子:

從字符數(shù)組里面拿數(shù)據(jù)進結(jié)構(gòu)體,然后打印出來(這里要先理解下面的sprintf然后一起看):

struct S
{
	int n;
	double d;
	char name[10];
};
int main()
{
	char arr[100] = { 0 };
	struct S tmp = { 0 };
	struct S s = { 100, 3.14, "zhangsan" };
	//把一個格式化的數(shù)據(jù)轉(zhuǎn)換成字符串
	sprintf(arr, "%d %lf %s", s.n, s.d, s.name);
	//打印
	printf("%s\n", arr);
	//從arr中的字符串中提取出一個格式化的數(shù)據(jù)
	sscanf(arr, "%d %lf %s", &(tmp.n), &(tmp.d), tmp.name);
	//打印
	printf("%d %lf %s\n", tmp.n, tmp.d, tmp.name);
	return 0;
}

二.printf,fprintf和sprintf

1.printf

printf就是一個打印函數(shù),從鍵盤上輸出,對于它來說就是:

把格式化的數(shù)據(jù)到標(biāo)準(zhǔn)輸出(屏幕)上

int main()
{
	int x = 0;
	printf("%d", x);
	return 0;
}

2.fprintf

fprintf同樣是比printf高級一點,它可以輸出到更多的地方,也就是包括著printf的功能,他的定義是:

把格式化的數(shù)據(jù)輸出到所有輸出流(屏幕/文件)上

同樣的我們可以先查一下fprintf - cplusplus:

釋義:將按格式指向的C字符串寫入流。如果格式包括格式說明符(從%開始的子序列),則格式化后的附加參數(shù)將被格式化并插入到結(jié)果字符串中,替換各自的說明符。

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

同樣經(jīng)過對比之后,我們發(fā)現(xiàn)fprintf和printf也就是差了一個FILE *的參數(shù),所以我們同樣可以先按照printf的格式寫,然后再加上參數(shù),就可以很好的使用fprintf了。

例子:

這里將一些值輸出到文件上,也就是當(dāng)我們運行完代碼之后,文件上就會擁有這些數(shù)據(jù):

//fprintf(按某一種格式寫入)
struct S
{
	int n;
	double d;
};
int main()
{
	struct S s = { 100, 3.14 };
	FILE* pf = fopen("data.txt", "w");//寫入文本文件data.txt
	if (NULL == pf)
	{
		perror("fopen");
		return -1;
	}
	//寫文件
	fprintf(pf, "%d %lf", s.n, s.d);
	//關(guān)閉文件
	fclose(pf);
	pf = NULL;
}

3.sprintf

對于ssprintf,還是先看定義:

釋義:在printf上使用格式時,使用相同的文本組成字符串,但內(nèi)容不是打印出來,而是存儲在str指向的緩沖區(qū)中的C字符串中。

實際上這里的意思就是:

把格式化的數(shù)據(jù)輸出轉(zhuǎn)換成字符串。

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

而對于這個函數(shù)參數(shù),我們參照printf轉(zhuǎn)換發(fā)現(xiàn),這里就是多了一個字符指針,也就是從后面的輸出的格式化中讀數(shù)據(jù),到前面的字符指針里面去。然后輸出得到的就是字符串。

例子:

打印結(jié)構(gòu)體的多種類型的數(shù)據(jù):

struct S
{
	int n;
	double d;
	char name[10];
};
int main()
{
	char arr[100] = { 0 };
	struct S tmp = { 0 };
	struct S s = { 100, 3.14, "zhangsan" };
	//把一個格式化的數(shù)據(jù)轉(zhuǎn)換成字符串
	sprintf(arr, "%d %lf %s", s.n, s.d, s.name);
	//打印
	printf("%s\n", arr);
    return 0;
}

我們以%s打印的,打印出來了:

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++實現(xiàn)冒泡排序(BubbleSort)

    C++實現(xiàn)冒泡排序(BubbleSort)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)冒泡排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 基于C語言實現(xiàn)掃雷小游戲

    基于C語言實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了基于C語言實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 如何編譯libfreetype方法詳解

    如何編譯libfreetype方法詳解

    libfreetype是為跨平臺設(shè)計的,在windows下要編譯的話,可以直接打開目錄進行編譯,本文將詳細(xì)介紹libfreetype編譯
    2012-11-11
  • 二叉搜索樹的插入與刪除(詳細(xì)解析)

    二叉搜索樹的插入與刪除(詳細(xì)解析)

    添加結(jié)點其實很容易,我們只需要找到結(jié)點所行對應(yīng)的位置就可以了,而且沒有要求是平衡的二叉搜索樹,因此每次添加結(jié)點都是在葉子結(jié)點上操作,不需要修改二叉搜索樹整體的結(jié)構(gòu)
    2013-09-09
  • Win10+VS2017新CUDA項目配置教程

    Win10+VS2017新CUDA項目配置教程

    這篇文章主要為大家詳細(xì)介紹了Win10+VS2017新CUDA項目配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • C語言實現(xiàn)自動存取款機模擬系統(tǒng)

    C語言實現(xiàn)自動存取款機模擬系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)自動存取款機模擬系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 詳細(xì)分析c++ const 指針與指向const的指針

    詳細(xì)分析c++ const 指針與指向const的指針

    這篇文章主要介紹了c++ const 指針與指向const的指針的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Cmake中強大的輸出函數(shù)message示例解析

    Cmake中強大的輸出函數(shù)message示例解析

    這篇文章主要介紹了Cmake中強大的輸出函數(shù)message解析,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • C++多態(tài)的全面講解

    C++多態(tài)的全面講解

    多態(tài)按字面的意思就是多種形態(tài)。當(dāng)類之間存在層次結(jié)構(gòu),并且類之間是通過繼承關(guān)聯(lián)時,就會用到多態(tài)。C++?多態(tài)意味著調(diào)用成員函數(shù)時,會根據(jù)調(diào)用函數(shù)的對象的類型來執(zhí)行不同的函數(shù)
    2022-06-06
  • C語言實現(xiàn)顛倒棧的方法

    C語言實現(xiàn)顛倒棧的方法

    這篇文章主要介紹了C語言實現(xiàn)顛倒棧的方法,是針對數(shù)據(jù)結(jié)構(gòu)中棧的常見操作技巧,需要的朋友可以參考下
    2014-09-09

最新評論

监利县| 景洪市| 大埔县| 马鞍山市| 株洲市| 平陆县| 建始县| 乌拉特后旗| 古田县| 长治县| 桑植县| 平安县| 徐州市| 沂水县| 宜黄县| 汨罗市| 株洲县| 台州市| 安泽县| 综艺| 呼图壁县| 锡林郭勒盟| 潍坊市| 泰和县| 南靖县| 长海县| 楚雄市| 横峰县| 融水| 冷水江市| 锦州市| 泸州市| 马关县| 江山市| 道孚县| 达拉特旗| 安顺市| 曲阳县| 宜章县| 隆德县| 平山县|