getchar
和 putchar
是 C 语言中用于字符输入和输出的标准库函数。它们分别用于读取一个字符和输出一个字符
getchar
函数用于读取下一个可用的字符,并返回该字符的 ASCII 值
所以在 C 语言中,getchar
函数的返回值是 int
类型(ASCII码,你懂的),而不是 char
类型
以下是一个简单的示例,展示了如何使用 getchar
并检查返回值:
#include <stdio.h>
int main() {
int ch; // 使用 int 类型来接收 getchar 的返回值
printf("请输入字符(按 Ctrl+D 或 Ctrl+Z 结束):\n");
while ((ch = getchar()) != EOF) { // 读取字符直到 EOF
putchar(ch); // 输出读取的字符
}
printf("\n输入结束\n");
return 0;
}
在这个示例中:
ch
被声明为int
类型,以便能够接收getchar
的返回值- 在
while
循环中,getchar
读取字符并将其赋值给ch
,同时检查是否等于EOF
- 如果读取成功,
putchar(ch)
将输出该字符;如果遇到 EOF,循环结束
这种设计,使得 空格、特殊字符、回车键(换行符)能够得以输入,而不需要利用fgets等函数
//尤其是回车键(换行符),这个真是逆天
再来看看EOF这个类似具有字符结束符的功能的东西
在 C 语言中,EOF
通常被定义为 -1。它是一个常量
//所以也能用 (ch = getchar()) != -1
,但更准确的做法是使用 EOF
常量来进行比较。这样可以提高代码的可读性和可维护性
重点内容是,如何产生EOF:
- 在终端中,用户可以通过特定的键盘组合来模拟
EOF
:- 在 Unix/Linux 系统中,通常使用
Ctrl+D
- 在 Windows 系统中,通常使用
Ctrl+Z
,然后按Enter
(重点,ctrl+z和回车)
- 在 Unix/Linux 系统中,通常使用
那么来使用gechar输入一个字符串,这个字符串包括空格,换行符
#include <stdio.h>
int main() {
char str[100];
int i = 0;
char ch;
printf("请输入一个字符串(输入#结束):\n");
// 使用 getchar 逐个读取字符
while (i < MAX_LENGTH - 1) { // 保证有空间留给字符串结束符
ch = getchar(); // 读取一个字符
// 检查是否为结束条件
if (ch == '#') {
break; // 如果输入#,则结束输入
}
str[i] = ch; // 将字符存入数组
i++;
}
str[i] = '\0'; // 添加字符串结束符
printf("您输入的字符串是:%s\n", str);
return 0;
}
第一个要注意的是,判断是否结束输入,不一定非要产生EOF,你可以用if语句判断,规矩是死的,人是活的
第二个就是ch,每个循环,先用ch存getchar( ),然后用str[ i ]来存ch
这样做,每次循环开始进行的操作就是更新ch的值,这样一箭双雕,自动实现了清空弹夹的操作
第三个要注意的,是str[i] = '\0'; // 添加字符串结束符
无论是while还是for,最后操作都是 i++,所以将数组+最后的下标(下标从0开始,如果该字符数组是动态分配的一个已经赋完值的变量n,那么就是n-1)赋值为字符结束符'\0'
//当然,通常我们是malloc(n+1),开始就手动加了个1留给字符结束符用
Comments NOTHING