Bootstrap

【C语言小知识】getchar与putchar

在学习c语言阶段存在着许多要求输入数值的例子,在输入字符时,如果使用scanf()和printf()根据%c转换说明读写字符,接下来介绍一堆字符输入/输出函数:getchar()和putchar()。

getchar介绍

在这里插入图片描述

  • int getchar ( void );
  • 从流中获取字符
  • 返回标准输入的下一个字符
  • 它等效于使用 stdin 作为参数调用 getc。

getchar()函数不带有任何参数,它从输入队列中返回下一个字符。

 ch = getchar();

这条语句读取下一个字符输入,并把该字符的值赋给变量ch。

	scanf("%c", &ch);

该语句与上面的语句效果相同。

putchar介绍

在这里插入图片描述

  • int putchar ( int character );
  • 将字符写入stdout
  • 将一个字符写入标准输出
  • 它等效于使用 stdout 作为参数调用 putc

putchar()函数打印它的参数。

putchar(ch);

此语句把之前赋给ch的值作为字符打印出来。

printf("%c", ch);

该语句与上面的语句效果相同。

总结

  • 由于getchar()与putchar()俩个函数只处理字符,所有较scanf()与printf()函数更快,更加简洁。
  • 同时getchar()与putchar()不需要转换说明,因为它们只处理字符。
  • 这俩个函数通常定义在stdio.h头文件中,它们通常是预处理宏,而不是真正的函数。
#include<stdio.h>

int main()
{
	char ch;
	ch = getchar();
	while (ch != '\n')
	{
		if (ch == ' ')
		{
			putchar(ch);
		}
		else
		{
			putchar(ch + 1);
		}
		ch = getchar();
	}

	return 0;
}

在这里插入图片描述
观察这段代码,与scanf()进行比较,使用getchar()时每次迭代的末尾有一条“读取语句”。可以将读取和测试合并为一个表达式:

#include<stdio.h>

int main()
{
	char ch;
	while ((ch = getchar()) != '\n')
	{
		if (ch == ' ')
		{
			putchar(ch);
		}
		else
		{
			putchar(ch + 1);
		}
	}

	return 0;
}

这里可以很好的体现C特有的编程风格——把俩个行为合并成一个表达式。

以上执行的行为是赋值给ch和把ch的值与换行符作比较。
表达式ch=getchar()俩侧的圆括号让其称为!=运算符的左值,读取ch的值后,测试条件相当于是ch!=‘\n’。

【注意】ch=getchar()俩侧的圆括号一定需要存在,因为!=运算符的优先级比=高。

 putchar(ch + 1);

此语句可以很好的演示字符实际上是作为整数存储的,表达式ch+1中的ch被转换成int类型,然后int类型的计算结果被传递给接受一个int类型参数的putchar().

;