什么是getchar?
在C语言中,getchar是一个标准函数,用于从标准输入流中读取一个单一字符。这个函数能够在处理字符输入时非常有用。
getchar函数的原型和参数
prototype:
int getchar(void);
parameters:
getchar函数不需要传递任何参数,它仅从标准输入流中读取单个字符。
使用getchar函数
使用getchar函数很简单,代码如下:
#include <stdio.h>
int main(void) {
int c;
printf("请输入一个字符:");
c = getchar();
printf("您输入的字符是:%c\n", c);
return 0;
}
代码执行结果如下:
请输入一个字符:a
您输入的字符是:a
每次调用getchar函数,它就从输入流中读取一个字符。我们可以把读取到的字符赋值给一个整型变量,仅仅是为了输出所输入的字符。
getchar函数的注意事项
换行符
我们在上面的代码中可以看到,程序等待用户输入字符时并没有输出一个换行符。这是因为在Windows系统中,输入回车(Enter)时会在输入流中添加一个额外的回车符(\r)和 换行符(\n)。因此,如果打印输出时不手动删除这些字符,程序就会产生错误的输出。
以下代码演示了在另一个Windows系统上打印回车符和换行符的输出:
#include <stdio.h>
int main(void)
{
int c;
printf("请输入一个字符:");
while ((c = getchar()) != '\n' && c != EOF)
{}
printf("回车和换行符:");
printf("(0x%x, 0x%x)\n", '\r', '\n');
return 0;
}
上述代码输出如下:
请输入一个字符:(用户输入一个字符并按回车键。)
回车和换行符:(0xd, 0xa)
另一方面,如果我们在Linux或类Unix系统上使用getchar时,只会看到一个换行符,并且输出不会受到影响。
EOF
在Unix系统上,我们可以通过键入Ctrl + D来发出EOF信号,告诉程序已经到达输入结束。在Windows系统上,我们使用Ctrl + Z。
在读取到EOF之后,getchar函数将始终返回-1,因此我们可以使用此特殊值终止循环。
以下代码演示了如何使用getchar读取输入,直到EOF:
#include <stdio.h>
int main(void)
{
int c;
while ((c = getchar()) != EOF) {
printf("%c", c);
}
printf("\n");
return 0;
}
上述代码将打印出输入中的所有字符,直到用户输入Ctrl + Z或Ctrl + D。
缓冲区
在编写程序时,我们时常会使用缓冲区,以便一次性处理多个输入。
下面是一个示例程序,它等待用户输入多个整数,然后计算它们的平均值。
#include <stdio.h>
int main(void)
{
int count = 0, sum = 0, n;
float avg;
while (scanf("%d", &n) == 1)
{
count ++;
sum += n;
}
if (count > 0) {
avg = (float) sum / count;
printf("平均值是 %.2f\n", avg);
}
return 0;
}
上述代码会从终端上读取任意数量的整数(每个整数应单独输入),直到遇到EOF。它将所有这些数字加在一起,然后计算它们的平均值,并输出结果。