国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

這篇具有很好參考價(jià)值的文章主要介紹了玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? 玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

?? 歡迎大家來(lái)到貝蒂大講堂??

????養(yǎng)成好習(xí)慣,先贊后看哦~????

所屬專欄:C語(yǔ)言學(xué)習(xí)
貝蒂的主頁(yè):Betty‘s blog

1. 單字符輸出函數(shù)

在C語(yǔ)言中有一個(gè)函數(shù)putchar專門負(fù)責(zé)輸出單個(gè)字符,其語(yǔ)法如下:

  1. 頭文件:#include<stdio.h>

  2. 聲明:int putchar(int char)

    • char -- 這是要被寫入的字符。該字符以其對(duì)應(yīng)的 int 值進(jìn)行傳遞。
  3. 作用:把參數(shù) char 指定的字符(一個(gè)無(wú)符號(hào)字符)寫入到標(biāo)準(zhǔn)輸出 stdout 中,也就是輸出單個(gè)字符。

  4. 返回值:該函數(shù)以無(wú)符號(hào) char 強(qiáng)制轉(zhuǎn)換為 int 的形式返回寫入的字符,如果發(fā)生錯(cuò)誤則返回 EOF。

以下是對(duì)putchar的具體使用示例:

#include<stdio.h>
int main()
{
	putchar('A');//輸出字符A	
	putchar('1');//輸出字符1
	putchar('\106');//輸出轉(zhuǎn)義字符F
	return 0;
}

輸出結(jié)果:

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

2. 多字符輸出函數(shù)

既然有單字符輸出函數(shù),那就自然有多字符輸出函數(shù)——puts,其語(yǔ)法如下:

  1. 頭文件:#include<stdio.h>
  2. 聲明:int puts(const char *str)
    • str -- 這是要被寫入的 C 字符串。
  3. 作用:把一個(gè)字符串寫入到標(biāo)準(zhǔn)輸出 stdout,直到空字符,但不包括空字符。換行符會(huì)被追加到輸出中。
  4. 返回值:如果成功,該函數(shù)返回一個(gè)非負(fù)值為字符串長(zhǎng)度(包括末尾的 \0),如果發(fā)生錯(cuò)誤則返回 EOF。

以下是對(duì)puts的具體使用示例:

int main()
{
	puts("hello world\n");
	puts("貝蒂來(lái)啦\n");
	return 0;
}

輸出結(jié)果:

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

3. 格式化輸出函數(shù)

3.1 語(yǔ)法

介紹完單字符與多字符輸出函數(shù),下面我們將介紹格式化輸出函數(shù)——printf,其語(yǔ)法如下:

  1. 頭文件:#include<stdio.h>
  2. 聲明:int printf(const char *format, ...)
    • format -- 這是字符串,包含了要被寫入到標(biāo)準(zhǔn)輸出 stdout 的文本。它可以包含嵌入的 format 標(biāo)簽,format 標(biāo)簽可被隨后的附加參數(shù)中指定的值替換,并按需求進(jìn)行格式化。
  3. 作用:將參數(shù)?本輸出到屏幕
  4. 返回值:如果成功,則返回寫入的字符總數(shù),否則返回一個(gè)負(fù)數(shù)。

3.2 占位符

printf() 可以在輸出?本中指定占位符。所謂“占位符”,就是這個(gè)位置可以?其他值代?。下表是常見的占位符:

占位符 含義
%d 以十進(jìn)制形式輸出整數(shù)
%u 以十進(jìn)制形式輸出無(wú)符號(hào)整數(shù)
%x 以十六進(jìn)制形式輸出整數(shù)(小寫字母)
%X 以十六進(jìn)制形式輸出整數(shù)(大寫字母)
%o 以八進(jìn)制形式輸出整數(shù)
%f 以浮點(diǎn)數(shù)形式輸出實(shí)數(shù)
%e 以指數(shù)形式輸出實(shí)數(shù)
%g 自動(dòng)選擇 %f 或 %e 輸出實(shí)數(shù)
%c 輸出單個(gè)字符
%s 輸出字符串
%p 輸出指針的地址
%n 輸出已經(jīng)輸出的字符數(shù)
%% 輸出百分號(hào)本身

以下是對(duì)printf的具體使用示例:

int main()
{
	printf("%d\n", 5);//打印整型
	printf("%f\n", 5.1);//打印浮點(diǎn)型
	printf("%c\n", 'a');//打印字符
	printf("%s\n", "betty");//打印字符串
	printf("betty");//也可以這樣打印字符串
	return 0;
}

輸出結(jié)果:

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

  • printf() 參數(shù)與占位符是??對(duì)應(yīng)關(guān)系,如果有 n 個(gè)占位符, printf() 的參數(shù)就應(yīng)該有 n +1 個(gè)(雙引號(hào)內(nèi)部也算一個(gè))。如果參數(shù)個(gè)數(shù)少于對(duì)應(yīng)的占位符, printf() 可能會(huì)輸出內(nèi)存中的任意值。

3.3 限定格式

(1) 限定寬度

printf() 允許限定占位符的最?寬度。以下是具體的實(shí)例:

int main()
{
	printf("%4d\n", 123);
	printf("%-4d\n", 123);
	printf("%12f\n", 123.45);
	return 0;
}

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

  • 上??例中, %4d 表?這個(gè)占位符的寬度至少為4位。如果不滿4位,對(duì)應(yīng)的值的前?會(huì)添加空格。輸出的值默認(rèn)是右對(duì)?,即輸出內(nèi)容前?會(huì)有空格;如果希望改成左對(duì)?,在輸出內(nèi)容后?添加空格,可以在占位符的 % 的后?插??個(gè) - 號(hào)。
  • 對(duì)于?數(shù),這個(gè)限定符會(huì)限制所有數(shù)字的最?顯?寬度。上??例中, %12f 表?輸出的浮點(diǎn)數(shù)最少要占據(jù)12位。由于?數(shù)的默認(rèn)顯?精度是?數(shù)點(diǎn)后6位,所以 123.45 輸出結(jié)果的頭部會(huì)添加2個(gè)空格。

(2) 總是顯示正負(fù)號(hào)

默認(rèn)情況下, printf() 不對(duì)正數(shù)顯示 + 號(hào),只對(duì)負(fù)數(shù)顯示 - 號(hào)。如果想讓正數(shù)也輸出 + 號(hào),可以在占位符的 % 后?加?個(gè) + 。

int main()
{
	printf("%+d\n", 13);
	printf("%+d\n", -13);
	return 0;
}

(3) 限制小數(shù)位數(shù)

輸出?數(shù)時(shí),有時(shí)希望限定?數(shù)的位數(shù)。舉例來(lái)說(shuō),希望?數(shù)點(diǎn)后?只保留兩位,占位符可以寫成 %.2f

#include <stdio.h>
int main()
{
	printf("Number is %.2f\n", 0.5);//輸出0.50
	return 0;
}
  • 這種寫法也是可以與限定寬度結(jié)合使用的

(4) 限定字符串的輸出

%s 占位符?來(lái)輸出字符串,默認(rèn)是全部輸出。如果只想輸出開頭的部分,可以? %.[m]s 指定輸出的?度,其中 [m] 代表?個(gè)數(shù)字,表?所要輸出的?度。

#include <stdio.h>
int main()
{
	printf("%.5s", "hello world");
	return 0;
}

輸出結(jié)果:

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

(5) 限定值輸入

最?寬度和?數(shù)位數(shù)這兩個(gè)限定值,都可以? ***** 代替,通過(guò) printf() 的參數(shù)傳?。

#include <stdio.h>
int main()
{
    printf("%*.*f\n", 6, 2, 0.5);
    return 0;
}// 等同于printf("%6.2f\n", 0.5);

3.4 printf的返回值

我們?cè)谇懊娼榻Bprintf時(shí)候就已經(jīng)了解過(guò)其返回值:如果成功,則返回寫入的字符總數(shù),否則返回一個(gè)負(fù)數(shù)。

下面就讓我們通過(guò)下列兩道題來(lái)加深理解:

(1) 題目一

int main()
{
	int a = 43;
	printf("%d\n", printf("%d", printf("%d", a)));//輸出什么??
	return 0;
}
  1. 首先肯定會(huì)執(zhí)行最里面的printf("%d",43),在屏幕上打印出43。
  2. 然后執(zhí)行printf("%d", printf("%d", 43)),相當(dāng)于打印第一步printf的返回值,‘4’,‘3’有兩個(gè)字符,所以返回值是2。
  3. 最后同理執(zhí)行printf("%d", printf("%d", printf("%d", 43))),即打印第二步的‘2’返回值,一個(gè)字符,返回值為1。
  4. 所以屏幕上最后打印的就是4321。

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

(2) 題目二

int main()
{
    printf("%d\n",printf("%d\n",printf("hello!\n"))); //輸出??
    return 0;
}https://s11.ax1x.com/2024/02/20/pFYxXCT.png
  1. 首先肯定會(huì)打印出hello!然后換行。
  2. 然后打印printf("%d\n",printf("hello!\n")),即第一步的返回值,需要注意是‘\n’是一個(gè)字符,所以返回值是7,換行。
  3. 最后打印printf("%d\n",printf("%d\n",printf("hello!\n"))),即第二步的返回值,格式化字符串的‘\n’也會(huì)算做一個(gè)字符,一共兩個(gè)字符,所以最后打印出2。

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

4. 單字符輸入函數(shù)

單字符輸入函數(shù)——getchar,顧名思義就是讀取一個(gè)字符,其用法如下:

  1. 頭文件:#include<stdio.h>
  2. 聲明:int getchar()
  3. 作用:從標(biāo)準(zhǔn)輸入 stdin 獲取一個(gè)字符(一個(gè)無(wú)符號(hào)字符)
  4. 返回值:該函數(shù)以無(wú)符號(hào) char 強(qiáng)制轉(zhuǎn)換為 int 的形式返回讀取的字符,如果到達(dá)文件末尾或發(fā)生讀錯(cuò)誤,則返回 EOF。

下面的實(shí)例演示了 getchar() 函數(shù)的用法:

#include <stdio.h>

int main()
{
	char c;
	printf("請(qǐng)輸入字符:");
	c = getchar();
	printf("輸入的字符:");
	putchar(c);
	return 0 ;
}

輸出結(jié)果:

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

5. 多字符輸入函數(shù)

多字符輸入函數(shù)——gets,顧名思義就是輸入一個(gè)字符,其用法如下:

  1. 頭文件:#include<stdio.h>
  2. 聲明:char *gets(char *str)
    • str -- 這是指向一個(gè)字符數(shù)組的指針,該數(shù)組存儲(chǔ)了 C 字符串。
  3. 作用:從標(biāo)準(zhǔn)輸入 stdin 讀取一行,并把它存儲(chǔ)在 str 所指向的字符串中。
  4. 返回值:如果成功,該函數(shù)返回 str。如果發(fā)生錯(cuò)誤或者到達(dá)文件末尾時(shí)還未讀取任何字符,則返回 NULL。

下面的實(shí)例演示了 gets() 函數(shù)的用法:

#include <stdio.h>
int main()
{
	char str[20] = { 0 };
	printf("請(qǐng)輸入一個(gè)字符串:");
	gets(str);
	printf("您輸入的字符串是:%s", str);
	return(0);
}

輸出結(jié)果:

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

6. 格式化輸入函數(shù)

6.1 語(yǔ)法

下列是格式化輸入函數(shù)——scanf的用法:

  1. 頭文件:#include<stdio.h>
  2. 聲明:int scanf(const char *format, ...)
    • format -- 這是 C 字符串,包含了以下各項(xiàng)中的一個(gè)或多個(gè):空格字符、非空格字符和 format 說(shuō)明符。
  3. 作用: 從標(biāo)準(zhǔn)輸入 stdin 讀取格式化輸入
  4. 返回值:如果成功,該函數(shù)返回成功匹配和賦值的個(gè)數(shù)。如果到達(dá)文件末尾或發(fā)生讀錯(cuò)誤,則返回 EOF。

下面的實(shí)例演示了 scanf() 函數(shù)的用法:

#include<stdio.h>
int main()
{
    int a, b, c;
    printf("請(qǐng)輸入三個(gè)數(shù)字:");
    scanf("%d%d%d", &a, &b, &c);
    printf("輸出結(jié)果是:%d,%d,%d\n", a, b, c);
    return 0;
}
  • &a、&b、&c 中的 & 是地址運(yùn)算符,分別獲得這三個(gè)變量的內(nèi)存地址。
  • %d%d%d 是按十進(jìn)值格式輸入三個(gè)數(shù)值。輸入時(shí),在兩個(gè)數(shù)據(jù)之間可以用一個(gè)或多個(gè)空格、tab 鍵、回車鍵分隔。

輸出結(jié)果:

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

  • 并且輸入數(shù)據(jù)也要與格式化內(nèi)數(shù)據(jù)保持一致。什么意思呢?我們以下面這段代碼舉例說(shuō)明:
#include<stdio.h>
int main()
{
    int a, b;
    scanf("%d,d", &a, &b);
    //輸入a,b?
    //輸入a b?
    printf("輸出結(jié)果是:%d,%d\n", a, b, );
    return 0;
}
  • 上訴代碼只能輸入a,b,而不能輸入a b因?yàn)橐c格式化內(nèi)容相匹配。

6.2 scanf與gets之間的區(qū)別

scanf在處理占位符時(shí)候,如果占位符不是%c,會(huì)忽略起始的空格(非起始的空格會(huì)停止),換行符,制表符。而gets可以將輸入流的數(shù)據(jù)全部讀取。比如說(shuō)下面這段代碼:

#include<stdio.h>
//如果輸入hello betty
//分別輸出什么
int main()
{
    char arr1[20];//存放字符串
    gets(arr1);
    char arr2[20];//存放字符串
    scanf("%s ", arr2);
    printf("arr1輸出:%s\n",arr1);
    printf("arr2輸出:%s\n", arr2);
    return 0;
}

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

  • 第一次輸入gets全部讀取,第二次輸入printf遇見空格就停止讀取。

6.3 緩存區(qū)

scanf() 處理用戶輸?的原理是,用戶的輸?先放?一個(gè)區(qū)域,等到按下回?鍵后,按照占位符對(duì)緩存進(jìn)?解讀。而這個(gè)區(qū)域就是我們的緩存區(qū)

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

注:標(biāo)準(zhǔn)輸入?般指的就是鍵盤,標(biāo)準(zhǔn)輸出?般指的就是屏幕

知道了緩沖區(qū)之后,讓我們來(lái)分析一段代碼:

int main()
{
	char password[20];
	printf("請(qǐng)輸入你的密碼:");
        scanf("%s", password);
	int ret = getchar();
	printf("請(qǐng)?jiān)俅未_認(rèn)你的密碼(Y/N):");
	if (ret == 'Y')
	{
		printf("密碼正確\n");
	}
	else
	{
		printf("密碼錯(cuò)誤\n");
	}
	return 0;
}

輸出結(jié)果:

玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘

為什么會(huì)出現(xiàn)這樣的結(jié)果呢?這時(shí)就要運(yùn)用緩沖區(qū)的知識(shí),在我們輸入abc回車(\n)時(shí),緩沖區(qū)中的數(shù)據(jù)為abc\n,而scanf只會(huì)讀取abc,\n會(huì)被一直留在緩沖區(qū)。所以在getchar再次讀取時(shí)會(huì)自動(dòng)讀取\n,輸出密碼錯(cuò)誤。

解決這個(gè)問題也很簡(jiǎn)單,我們只需要再加一個(gè)getchar提前把\n讀取就行了。

int main()
{
	char password[20];
	printf("請(qǐng)輸入你的密碼:");
	scanf("%s", password);
	printf("請(qǐng)?jiān)俅未_認(rèn)你的密碼(Y/N):");
	getchar();//清空緩沖區(qū)
	int ret = getchar();
	if (ret == 'Y')
	{
		printf("密碼正確\n");
	}
	else
	{
		printf("密碼錯(cuò)誤\n");

	}
	return 0;
}

6.4 scanf的返回值

如果成功,該函數(shù)返回成功匹配和賦值的個(gè)數(shù)。如果到達(dá)文件末尾或發(fā)生讀錯(cuò)誤,則返回 EOF。這一點(diǎn)常常用于多組數(shù)據(jù)輸入,比如說(shuō)多組數(shù)據(jù)求和,可以寫成如下形式:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-833239.html

int main()
{
	int a, b;
	while (scanf("%d%d") == 2)
	{
		int sum = a + b;
		printf("%d", sum);
	}
	return 0;
}
  • 在VS環(huán)境下可以按3次 ctrl+z 強(qiáng)制結(jié)束。

到了這里,關(guān)于玩轉(zhuǎn)C語(yǔ)言:深入理解輸入輸出函數(shù)的奧秘的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包