C语言fgets()函数

fgets(str, 20, stdin); 

这段代码是在C语言中使用的一个函数,其功能是从标准输入流(stdin)中读取一行文本,并将其存储在一个字符数组(str)中。这个函数的原型是 char *fgets(char *s, int n, FILE *stream);,其中 s 是一个指向字符数组的指针,n 表示要读取的最大字符数(包括终止符 '\0'),stream 是一个指向 FILE 对象的指针,标识了要从中读取字符的流。

在这段代码中,str 是一个字符数组,用于存储从标准输入流中读取的字符串。20 表示 str 数组的大小,即最多可以存储19个字符加上一个终止符 '\0'。stdin 是标准输入流的标识符,它通常指向键盘输入。

fgets 函数的行为是这样的:它会从 stream 指向的流中读取字符,直到遇到换行符 '\n'、文件结束符 EOF,或者读取了 n-1 个字符。然后,它会将最后一个字符替换为终止符 '\0',并将字符数组 str 中的字符设置为 '\0'。如果 fgets 函数成功执行,它会返回指向字符数组 str 的指针;如果遇到文件结束符 EOF,或者 n 参数为0或1,它会返回一个空指针。

值得注意的是,fgets 函数不会将换行符 '\n' 视为终止符,因此如果你想要去除字符串中的换行符,可以在字符串末尾手动添加一个终止符 '\0'。

总的来说,fgets(str, 20, stdin); 这段代码的作用是,从键盘输入中读取最多19个字符(包括换行符),并将这些字符存储在名为 str 的字符数组中。

深入研究

如何处理由fgets函数读入的字符串中包含换行符?

处理由fgets函数读入的字符串中包含换行符的方法主要有两种:

  1. 使用strchr函数查找换行符并替换
    你可以使用strchr函数来查找字符串中的换行符\n,并将其替换为字符串结束符\0。这种方法可以在读取字符串后立即去除换行符,适用于你需要立即处理字符串的情况。

    char line;[80]
    fgets(line, 80, stdin);
    char *find = strchr(line, '\n');
    if(find)
        *find = '\0';
  2. 自定义封装fgets函数
    你可以定义一个新的函数,比如MyFgets,来封装fgets函数,并在其中处理换行符。这样,每次需要读取字符串时,只需调用MyFgets即可。

    char* MyFgets(char data[], int count) {
        fgets(data, count, stdin);
        char *find = strchr(data, '\n');
        if(find)
            *find = '\0';
        return data;
    }

    然后在主函数中使用这个封装函数:

    int main() {
        char data = "\0";[20]
        MyFgets(data, 10);
        printf("%s", data);
        return 0;
    }

以上两种方法均可以有效地处理由fgets函数读入的字符串中的换行符,选择哪种方法取决于你的具体需求和偏好。

为什么fgets函数不把换行符作为字符串的一部分保存?

fgets函数在C语言中用于从文件或标准输入中读取一行字符,并将其存储到指定的字符数组中。通常,fgets函数会在读取的字符串末尾添加一个'\0'作为字符串的结束符。然而,如果读取的字符数没有超过数组的大小,且最后一个字符是换行符('\n'),那么换行符也会被存储在字符串中。这意味着,如果你想要获取用户输入的一行文本,包括其中的换行符,你可以使用fgets函数来实现这一点。

然而,如果你不希望换行符被存储在字符串中,你可以在读取到换行符后将其替换为'\0'。例如,你可以使用以下代码来读取一行文本,但不包括换行符:

#include <stdio.h>

int main() {
    char buffer;[100]
    printf("请输入一行文本:");
    fgets(buffer, 100, stdin);
    if (buffer[strlen(buffer) - 1] == '\n') {
        buffer[strlen(buffer) - 1] = '\0';
    }
    printf("你输入的文本是:%s\n", buffer);
    return 0;
}

在上述代码中,我们首先使用fgets函数从标准输入中读取一行文本,并将其存储在名为buffer的字符数组中。然后,我们检查buffer中的最后一个字符是否是换行符。如果是,我们将它替换为字符串结束符'\0'。最后,我们使用printf函数将输入的文本打印出来。

需要注意的是,fgets函数并不会自动丢弃换行符,而是将其作为字符串的一部分存储。因此,如果你确实需要去除换行符,你需要在读取字符串后对其进行处理,正如上述代码所示。

  • 35
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值