11.11 晚上 C语言用getchar输入字符串

发布于 9 天前  15 次阅读


getcharputchar 是 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和回车)

那么来使用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留给字符结束符用

届ける言葉を今は育ててる
最后更新于 2024-11-11