c語言標准輸入和scanf的關系


int a
scanf("%d",&a);

 什么意思,是從鍵盤讀取一個數字存放到a中。錯,scanf和所有從鍵盤獲取輸入數據的函數都不是直接從鍵盤獲取數據的,而是從“標准輸入”獲取數據的,如果標准輸入沒有數據,才讓用戶從鍵盤輸入數據的。

 

當程序提示我們輸入數據的時候實際上發生了這樣的過程:

 

鍵盤數據----------緩沖區----------標准輸入

 

緩沖區你可以理解為程序分配的一塊內存空間,標准輸入你可以理解為另外一塊內存空間

你有沒有發現在調用scanf輸入數據的時候我們是可以編輯輸入數據的,本想輸入數字,結果輸入了字母,可以按退格鍵,重新輸入的,那么這些字符就被輸入到了緩沖區里面了,直到按下回車之后,緩沖區的數據連同最后輸入的回車一起被寫到標准輸入里面取了。然后scanf從標准輸入讀取數據。

 

	char ch;

	ch = getchar();
	putchar(ch);

	ch = getchar();
	putchar(ch);

 

看下上面這段代碼,getchar意思是從標准輸入獲取一個字符,但是我輸入的是hello 共5個字符,當我按下回車的時候,這5個字符連同回車一同被寫入到了標准輸入中,putchar是從標准輸入獲取一個字符輸出,默認是第一個字符,那么自然會輸出h

然后下面我又調用 getchar(),這次還要從鍵盤讀取輸入數據嗎? 不需要,是直接從標准輸入讀取的數據,由於標准輸入現在是hello\n這幾個字符, getchar獲取的獲取的是e這個字符,然后調用putchar輸出e。所以最后的結果是he。

 

我寫了一個程序來把標准輸入的數據放到輸入中。

	char ch;
	char test[10] = {0};
	int x=0;
	while(x<6)
	{
		ch = getchar();
		test[x] = ch;
		x++;
	}

運行結果:

可以看到標准輸入的最后一個字符是\n

 

getchar scanf這些輸入函數並不限制你輸入字符的個數,實際上你想輸入多少個字符都可以,只是當你按下回車的時候,所有緩沖區的數據被寫入到標准輸入里面,然后getchar從標准輸入從里面讀一個字符,scanf從標准輸入讀一個數字、一個字符、一個字符串。

以前一直覺得getchar調用一次就從鍵盤輸入一次數據,並不是這樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM