天天看點

換行符處理

輸入大寫字母,列印出小寫字母。

input:A

B

output:a

b

這是一個極為簡單的題,但其裡面的某些東西,卻值得我們深究。

先寫代碼吧,我們再讨論裡面的知識。

#define _CRT_SECURE_NO_WARINGS
#include <stdio.h>
int main(void)
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		printf("%c\n", ch + 32);
		getchar();//清理換行符
	}
	return 0;
}
           

複習一個緩沖區的概念。

輸入大寫字母,‘A’,A并不會直接輸出到螢幕,而是會發送到一個叫緩沖區的地方。待輸入結束,再将輸出值列印到螢幕。而諾輸入一個A,再【Enter】,就會相當于輸入了A和’\n‘,進入緩沖區,再運算後列印。 而\n也會運算後列印,達不到輸出效果。需要隔離\n,并進入下一個循環。而未處理,據相當于兩次循環,A與\n都進入循環(兩次)。我們要做的是防止\n開啟并進入新的循環。getchar(),讀取\n,并進入下一個循環,再次讀取字元且判斷條件是否為真。【Enter】也是一個字元,‘\n’。這種類型的方法可以處理\n.防止被讀入。

還有一種循環處理,多用于函數中處理多個輸入。

while ((scanf("%d", &a)) != '\n')
		coutinue;
           

多次輸入的會被該循環截停,留在緩沖區,等待下一次輸出,直到輸入一個換行符,該循環結束,開始進入下一步。

這是一個方法好的,可以阻止換行符。

再來一種小技巧

#include <stdio.h>
int main(void)
{
	int a;
	while (scanf(" %c", &a) != EOF)
		printf("%c", a);
	return 0;
}
           

%c前有一個空格,這是忽略換行符(\n)的關鍵

樓沒有處理換行符發送到緩沖區的輸入是這樣的。

iuput :a\n

。。。b\n

。。。c\n

output :a\n

.。。。b\n

。。。c\n

而空格可以吸收\n,因為%c的讀取是會跳過空格,而講\n比對到空格的輸入出,%c就會直接跳過讀入%c。就處理了\n。

繼續閱讀