c语言输入字符时控制符%c前加空格的原因解释
文章目錄
- 一、前景知識
- 1、緩沖區
- 2、標準輸入流
- 二、scanf語句的執行
- 1、scanf對于整形%d的輸入
- 2、scanf對于字符%c的輸入
?? 在編一個代碼時偶然間發現一個知識盲點…用scanf語句輸入字符時需要在控制符%c前加空格。
?? 在解釋相關這個原因前我們需要了解幾個相關知識點。
一、前景知識
1、緩沖區
?? 緩沖區又稱緩存,是內存的一部分。內存空間中預留了一定的內存空間,用于緩沖輸入或輸出的數據。因為計算機對緩沖區的操作大大快于磁盤的操作,因此可以提升計算機的運行速度。
2、標準輸入流
?? 在c語言中,在程序開始運行時,系統會自動的打開標準輸入的標準文件,它與終端相聯系。系統會定義一個文件指針stdin即標準輸入流,來指向終端輸入。而scanf語句就是從標準輸入流中獲取數據。
二、scanf語句的執行
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; }?? 對于上述的簡單代碼中,當我們執行到scanf語句時,我們會輸入一個整形數字,這個數字會存放到緩存區,當我們以回車結束時,會把數據與換行符"\n"一起傳送到標準輸入流中。
?? 對于整形控制符%d作用下的scanf語句,它會從標準流輸入中查找數據,跳過空白符(空格、換行符、制表符),直到遇到數字,則開始讀入。
2、scanf對于字符%c的輸入
?? 上述控制符%d的輸入準則與控制符%c中有所不同,所以相應的代碼也就需要作出改變。
#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前面加一個空格。如果沒有加的話在我們輸入第一個字符并以空格結束輸入后,該字符與’\n’會一起進入標準流輸入,’\n’便會作為第二個scanf語句的內容輸入,從而讓你的程序出現問題。
?? 而加空格便會屏蔽空白字符。
?? %c前沒空格,scanf()將讀取標準輸入流中的第一個字符,%c前有空格,scanf()則讀取標準輸入流中第一個非空白字符。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的c语言输入字符时控制符%c前加空格的原因解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle11g ogg报价,Orac
- 下一篇: 你的main函数规范吗?