1. 程式人生 > >c語言標準輸入和scanf的關系

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

我們 scanf etc 鍵盤輸入 div while image 標準輸入 這樣的

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從標準輸入讀一個數字、一個字符、一個字符串

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