换行符处理

输入大写字母,打印出小写字母。

input:A
B

output:a
b

这是一个极为简单的题,但其里面的某些东西,却值得我们深究。
先写代码吧,我们再讨论里面的知识。

#define _CRT_SECURE_NO_WARINGS
#include 
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 
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。

你可能感兴趣的:(换行符,c语言)