91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言scanf,fscanf和sscanf有哪些區別

發布時間:2021-10-12 10:10:47 來源:億速云 閱讀:146 作者:iii 欄目:開發技術

本篇內容介紹了“C語言scanf,fscanf和sscanf有哪些區別”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

目錄
  • 一.scanf,fscanf和sscanf

    • 1.scanf

    • 2.fscanf

    • 3.sscanf

  • 二.printf,fprintf和sprintf

    • 1.printf

    • 2.fprintf

    • 3.sprintf

一.scanf,fscanf和sscanf

1.scanf

首先scanf我們的很熟悉,他就是從鍵盤上輸入數據,準確的來說就是:

從標準輸入(鍵盤)讀取格式化的數據。

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

2.fscanf

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

從所有的輸入流讀取格式化的數據。

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

C語言scanf,fscanf和sscanf有哪些區別

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

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

這里的參數如果看不懂,我們就可以進行對比去學習,我們可以打開scanf的說明去看一下對比一下:

C語言scanf,fscanf和sscanf有哪些區別

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

例子:

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

//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);
	//關閉文件
	fclose(pf);
	pf = NULL;
}

3.sscanf

老規矩,我們查一下這個函數的定義:

C語言scanf,fscanf和sscanf有哪些區別

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

從字符串中讀取一個格式化的數據。

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

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

C語言scanf,fscanf和sscanf有哪些區別

例子:

從字符數組里面拿數據進結構體,然后打印出來(這里要先理解下面的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" };
	//把一個格式化的數據轉換成字符串
	sprintf(arr, "%d %lf %s", s.n, s.d, s.name);
	//打印
	printf("%s\n", arr);
	//從arr中的字符串中提取出一個格式化的數據
	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就是一個打印函數,從鍵盤上輸出,對于它來說就是:

把格式化的數據到標準輸出(屏幕)上

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

2.fprintf

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

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

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

C語言scanf,fscanf和sscanf有哪些區別

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

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

同樣經過對比之后,我們發現fprintf和printf也就是差了一個FILE *的參數,所以我們同樣可以先按照printf的格式寫,然后再加上參數,就可以很好的使用fprintf了。

例子:

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

//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);
	//關閉文件
	fclose(pf);
	pf = NULL;
}

3.sprintf

對于ssprintf,還是先看定義:

C語言scanf,fscanf和sscanf有哪些區別

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

實際上這里的意思就是:

把格式化的數據輸出轉換成字符串。

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

而對于這個函數參數,我們參照printf轉換發現,這里就是多了一個字符指針,也就是從后面的輸出的格式化中讀數據,到前面的字符指針里面去。然后輸出得到的就是字符串。

例子:

打印結構體的多種類型的數據:

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" };
	//把一個格式化的數據轉換成字符串
	sprintf(arr, "%d %lf %s", s.n, s.d, s.name);
	//打印
	printf("%s\n", arr);
    return 0;
}

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

C語言scanf,fscanf和sscanf有哪些區別

“C語言scanf,fscanf和sscanf有哪些區別”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

元氏县| 马鞍山市| 化隆| 光山县| 徐汇区| 东阳市| 新平| 广元市| 宝山区| 唐河县| 泰和县| 濉溪县| 略阳县| 治多县| 石楼县| 肥西县| 诏安县| 长汀县| 孝感市| 衡东县| 潍坊市| 诸暨市| 呼玛县| 滦南县| 昭觉县| 临朐县| 常宁市| 英超| 隆回县| 富锦市| 沙河市| 德江县| 孙吴县| 凤冈县| 牙克石市| 湾仔区| 滨州市| 延长县| 长治县| 桂阳县| 马尔康县|