c语言getblank

99ANYc3cd6
预计阅读时长 20 分钟
位置: 首页 C语言 正文

在 C 语言中,并没有一个叫做 getblank() 的标准库函数,你可能指的是 getchar() 函数,或者想要实现一个功能,即“获取并处理空白字符”。

c语言getblank
(图片来源网络,侵删)

我将从以下几个方面为你解答:

  1. 最直接的方法:使用 getchar()
  2. 一个自定义的 getblank() 函数
  3. 如何“跳过”空白字符(这是更常见的场景)
  4. 一个综合的示例程序

最直接的方法:使用 getchar()

getchar() 是 C 标准库 <stdio.h> 中的一个函数,它的作用是从标准输入(通常是键盘)读取一个字符

空白字符在 C 中通常指:

  • (空格)
  • '\t' (水平制表符 Tab)
  • '\n' (换行符)
  • '\v' (垂直制表符)
  • '\f' (换页符)
  • '\r' (回车符)

你可以使用 getchar() 循环读取字符,然后用 if 语句判断它是不是你想要的空白字符。

示例代码:读取并打印所有输入的空白字符,直到遇到非空白字符或文件结束。

#include <stdio.h>
int main() {
    int c; // 必须是 int 类型,因为 getchar() 返回的是 int,用于表示 EOF
    printf("请输入一些字符,按回车结束:\n");
    // 循环读取字符,直到遇到非空白字符或文件结束
    while (1) {
        c = getchar(); // 读取一个字符
        // 检查是否到达文件结束符 (Ctrl+D 或 Ctrl+Z)
        if (c == EOF) {
            break;
        }
        // 检查是否是空白字符
        if (c == ' ' || c == '\t' || c == '\n') {
            printf("读取到一个空白字符: ");
            // 使用 %c 打印字符本身,使用 %%c 打印 ' 或 " 等
            if (c == ' ') {
                printf("' ' (空格)\n");
            } else if (c == '\t') {
                printf("'\\t' (制表符)\n");
            } else if (c == '\n') {
                printf("'\\n' (换行符)\n");
            }
        } else {
            // 如果不是空白字符,就退出循环
            // 注意:这个非空白字符已经被读取了,但还没有被处理
            break;
        }
    }
    printf("程序结束,\n");
    return 0;
}

一个自定义的 getblank() 函数

如果你想实现一个专门“获取”空白字符的函数,可以封装上面的逻辑,这个函数可以读取一个空白字符并返回它,或者如果没有找到则返回一个特殊值(如 EOF)。

示例代码:一个自定义的 getblank() 函数

#include <stdio.h>
// 自定义函数:尝试读取一个空白字符
// 如果成功读取,返回该字符
// 如果失败(遇到非空白字符或EOF),返回EOF
int getblank() {
    int c;
    while (1) {
        c = getchar();
        if (c == EOF) {
            return EOF; // 到达文件末尾,返回EOF
        }
        // 检查是否是空白字符
        if (c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r') {
            return c; // 是空白字符,返回它
        }
        // 如果不是,把它放回流中(或者直接丢弃,取决于需求)
        // 这里我们选择直接丢弃,并继续寻找下一个空白字符
    }
}
int main() {
    printf("请输入一些文本,程序会跳过所有非空白字符,直到找到第一个空白字符:\n");
    int blank_char = getblank();
    if (blank_char != EOF) {
        printf("成功读取到空白字符: ");
        switch (blank_char) {
            case ' ':  printf("' ' (空格)\n"); break;
            case '\t': printf("'\\t' (制表符)\n"); break;
            case '\n': printf("'\\n' (换行符)\n"); break;
            case '\v': printf("'\\v' (垂直制表符)\n"); break;
            case '\f': printf("'\\f' (换页符)\n"); break;
            case '\r': printf("'\\r' (回车符)\n"); break;
            default:   printf("未知空白字符\n"); break;
        }
    } else {
        printf("没有找到任何空白字符或输入已结束,\n");
    }
    return 0;
}

如何“跳过”空白字符(更常见的场景)

在解析文件或用户输入时,更常见的需求是跳过前导的空白字符,然后读取第一个有意义的字符,C 标准库为此提供了专门的函数,强烈推荐使用它们,因为它们更高效、更标准。

  • int isspace(int c); (在 <ctype.h> 中)
    • 检查字符 c 是否是任何标准的空白字符(包括上面列出的所有)。
    • 返回非零值(真)如果是,否则返回 0(假)。
  • int skip_whitespace(FILE *stream); (这不是标准函数,但很常见)

    一个自定义的、用于跳过文件流中空白字符的函数。

标准库最佳实践:使用 isspace()

#include <stdio.h>
#include <ctype.h> // 必须包含此头文件才能使用 isspace()
int main() {
    int c;
    printf("请输入一些文本,程序会跳过所有前导空白字符:\n");
    // 输入: "   Hello World"
    // 循环读取,直到遇到一个非空白字符或EOF
    while ((c = getchar()) != EOF) {
        if (!isspace(c)) { // c 不是空白字符
            break;         // 退出循环
        }
        // 如果是空白字符,循环会继续,自动跳过
    }
    // c 的值是第一个非空白字符,或者是 EOF
    if (c != EOF) {
        printf("第一个非空白字符是: '%c'\n", c);
    } else {
        printf("输入为空或已结束,\n");
    }
    return 0;
}

一个综合的示例程序

这个程序将结合 getchar()isspace() 和循环,演示如何读取一行文本,并统计其中的字符数、空白字符数和单词数。

#include <stdio.h>
#include <ctype.h> // for isspace()
#define IN  1  // 在一个单词内部
#define OUT 0  // 在一个单词外部
int main() {
    int c, state, nc, nw, nl;
    state = OUT;
    nc = nw = nl = 0;
    printf("请输入多行文本 (Ctrl+D 或 Ctrl+Z 结束输入):\n");
    while ((c = getchar()) != EOF) {
        ++nc; // 字符计数
        if (c == '\n') {
            ++nl; // 换行符计数
        }
        // 使用 isspace() 检查所有空白字符
        if (isspace(c)) {
            state = OUT; // 遇到空白,标记为在单词外部
        } 
        // 如果当前不在单词内部,并且当前字符不是空白
        else if (state == OUT) {
            state = IN;  // 标记为进入单词内部
            ++nw;       // 单词计数加一
        }
    }
    printf("\n统计结果:\n");
    printf("总字符数: %d\n", nc);
    printf "总行数: %d\n", nl);
    printf "总单词数: %d\n", nw);
    return 0;
}
需求 推荐方法 说明
读取一个字符 getchar() C 标准库函数,最基础。
判断一个字符是否为空白 isspace(c) C 标准库函数(<ctype.h>),最标准、最全面。
获取/读取一个空白字符 getchar() + if 或自定义 getblank() 通过循环和条件判断实现。
跳过前导空白字符 while ((c = getchar()) != EOF && isspace(c)); 这是最常见和高效的模式。
处理输入流中的所有空白 while ((c = getchar()) != EOF) + if/else 在循环内部使用 isspace() 进行判断和处理。

getblank() 不是 C 的标准函数,你需要根据具体需求,使用 getchar()isspace() 等标准工具来实现你的逻辑。

-- 展开阅读全文 --
头像
dede网站运行天数
« 上一篇 04-20
织梦 当前一级栏目
下一篇 » 04-20

相关文章

取消
微信二维码
支付宝二维码

目录[+]