c语言输入字符时控制符%c前加空格的原因解释
文章目錄
- 一、前景知識(shí)
- 1、緩沖區(qū)
- 2、標(biāo)準(zhǔn)輸入流
- 二、scanf語句的執(zhí)行
- 1、scanf對于整形%d的輸入
- 2、scanf對于字符%c的輸入
?? 在編一個(gè)代碼時(shí)偶然間發(fā)現(xiàn)一個(gè)知識(shí)盲點(diǎn)…用scanf語句輸入字符時(shí)需要在控制符%c前加空格。
?? 在解釋相關(guān)這個(gè)原因前我們需要了解幾個(gè)相關(guān)知識(shí)點(diǎn)。
一、前景知識(shí)
1、緩沖區(qū)
?? 緩沖區(qū)又稱緩存,是內(nèi)存的一部分。內(nèi)存空間中預(yù)留了一定的內(nèi)存空間,用于緩沖輸入或輸出的數(shù)據(jù)。因?yàn)橛?jì)算機(jī)對緩沖區(qū)的操作大大快于磁盤的操作,因此可以提升計(jì)算機(jī)的運(yùn)行速度。
2、標(biāo)準(zhǔn)輸入流
?? 在c語言中,在程序開始運(yùn)行時(shí),系統(tǒng)會(huì)自動(dòng)的打開標(biāo)準(zhǔn)輸入的標(biāo)準(zhǔn)文件,它與終端相聯(lián)系。系統(tǒng)會(huì)定義一個(gè)文件指針stdin即標(biāo)準(zhǔn)輸入流,來指向終端輸入。而scanf語句就是從標(biāo)準(zhǔn)輸入流中獲取數(shù)據(jù)。
二、scanf語句的執(zhí)行
1、scanf對于整形%d的輸入
#include <stdio.h> int main (void) {int a;scanf("%d",&a);while(a != 0){printf("%d",a);scanf("%d",&a);}return 0; }?? 對于上述的簡單代碼中,當(dāng)我們執(zhí)行到scanf語句時(shí),我們會(huì)輸入一個(gè)整形數(shù)字,這個(gè)數(shù)字會(huì)存放到緩存區(qū),當(dāng)我們以回車結(jié)束時(shí),會(huì)把數(shù)據(jù)與換行符"\n"一起傳送到標(biāo)準(zhǔn)輸入流中。
?? 對于整形控制符%d作用下的scanf語句,它會(huì)從標(biāo)準(zhǔn)流輸入中查找數(shù)據(jù),跳過空白符(空格、換行符、制表符),直到遇到數(shù)字,則開始讀入。
2、scanf對于字符%c的輸入
?? 上述控制符%d的輸入準(zhǔn)則與控制符%c中有所不同,所以相應(yīng)的代碼也就需要作出改變。
#include <stdio.h> int main (void) {int a;printf("Do you want to input?(Y/N)")scanf(" %c",&a);while(a == 'Y' || a == 'y' ){printf("Do you want to continue?(Y/N)");scanf(" %c",&a);}return 0; }?? 在上述代碼中我們需要在scanf語句中的%c前面加一個(gè)空格。如果沒有加的話在我們輸入第一個(gè)字符并以空格結(jié)束輸入后,該字符與’\n’會(huì)一起進(jìn)入標(biāo)準(zhǔn)流輸入,’\n’便會(huì)作為第二個(gè)scanf語句的內(nèi)容輸入,從而讓你的程序出現(xiàn)問題。
?? 而加空格便會(huì)屏蔽空白字符。
?? %c前沒空格,scanf()將讀取標(biāo)準(zhǔn)輸入流中的第一個(gè)字符,%c前有空格,scanf()則讀取標(biāo)準(zhǔn)輸入流中第一個(gè)非空白字符。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的c语言输入字符时控制符%c前加空格的原因解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle11g ogg报价,Orac
- 下一篇: 你的main函数规范吗?