C语言中的多组输入

引例:大小写转换_牛客题霸_牛客网

C语言中的多组输入_第1张图片

今天刷题遇到这样一个题,实现多组输入。

我刚开始是这样写的代码:

#include 

int main()
{
	char ch;
	while (ch = getchar())
	{
		putchar(ch + 32);

	}
	return 0;
}

运行结果:

C语言中的多组输入_第2张图片

每次输入一个大写字母,转换成小写字母后后面还会跟着一个星号,也不知道这是什么原因,后来经过查资料了解到,getchar()函数是从键盘录入一个字符,它只取一个字符。它的工作原理是这样的:

C语言中的多组输入_第3张图片

getchar()函数与键盘输入之间还有一个输入缓冲区,程序开始运行时,会等待用户从键盘输入一个字符,但是输入一个字符光标还在闪烁,getchar()还没有拿到输入的字符,只有再按一下回车键,getchar()才会拿到这个字符,而拿到的这个字符是A,通过putchar()函数输出字符的小写形式a,而输入缓冲区还有一个字符'\n',这个时候getchar()会直接再拿到字符'\n',再通过putchar()函数将

'\n'转换成相应的字符('\n'对应的ASCII码是10,10+32等于42,而42对应的字符是*,所以输出的是*)输出。这就知道为什么会有以上的输出结果了。那么怎么解决这个问题呢?

很简单,只需要在第一次输出小写字符后,在用一次getchar()函数,将字符'\n'获取,这样就不会出现星号了。

#include 

int main()
{
	char ch;
	while (ch = getchar())
	{
		putchar(ch + 32);
		getchar();
	}
	return 0;
}

 C语言中的多组输入_第4张图片

但是我们怎么实现多组输入呢?上述程序没有结束条件,会一直循环。

我们可以将代码改成如下:

#include 

int main()
{
	char ch;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch + 32);
		getchar();
	}
	return 0;
}

这是getchar()函数的返回值信息,C语言中的多组输入_第5张图片

 这是常用的一种实现多组输入的方法,很多人好奇EOF是什么东西,EOF ——end of file ,文件的结束标志。如果getchar()读到的不是EOF ,那么循环会继续。如果想结束循环,只需要将getchar()得到的是EOF就可以。 

如果想要结束循环,输入Ctrl+z,这样就结束了。

C语言中的多组输入_第6张图片

如果是这样还不足以通过上面那道牛客题,它要求的输出必须换行,而上面的程序没有实现换行。C语言中的多组输入_第7张图片

这就是完整代码,即实现了多组输入,有实现了输出换行,这样就完美的完成了上面那道题。

#include 

int main()
{
	char ch;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch + 32);
		printf("\n");
		getchar();
	}
	return 0;
}

C语言中的多组输入_第8张图片

你可能感兴趣的:(c语言)