字符串的三种输入方法

本文介绍了C语言中scanf、gets、fgets和getchar四个输入函数在处理字符串时的特性,强调了gets的安全风险以及如何使用fgets替代。同时提到了getchar用于单字符输入并能显示其ASCII值。
摘要由CSDN通过智能技术生成

1.sacnf:输入不含空格的字符串。

#include<stdio.h>
int main(){
    char s[30];
    scanf("%s", s);
    printf("%s\n", s);
    return 0;
}

因为scanf会将空格识别为输入数据的分隔符,所以用它是不能输入含有空格的字符串的。如输入Hello World!,它会将其识别为两个字符串,上面的代码结果只会输出Hello。

2.gets():输入单行字符串。

gets()函数的功能是将键盘输入的单行字符串保存到字符数组中。该函数可以读取空格。

#include<stdio.h>
int main(){
    char s[30];
    gets(s);
    printf("%s\n", s);
    return 0;
}

据说这个函数有安全风险,已经成为弃儿。新标准对这个函数进行了升级,加了个小尾巴,变成gets_s()。不过这个升级版不光造型上狗尾续貂,食用起来也是个鸡肋,因为有些编译器(比如GCC)根本不支持它。

要想又安全又兼容怎么办呢?你得改用fgets(),这不免让人有杀鸡用牛刀之感。要替代gets(),你不得不把代码写成这样的复杂形式。

#include <stdio.h>
int main() {
    char s[30];
    //从标准输入读取字符串,会读取换行符
    fgets(s, sizeof(s), stdin);

    //去除换行符
    s[strcspn(s, "\n")] = 0;

    printf("%s\n", s);
    return 0;
}

总之,真是麻烦!

注:strcspn() 函数返回'\n'在字符串s中的位置。通过将此位置的字符赋值为 '\0',就将换行符变成字符串的结束符。

3.getchar():输入单个字符。

#include <stdio.h>
int main() {
    int ch;
    printf("请输入一个字符: ");
    ch = getchar();
    printf("你输入的字符是: %c\n", ch);
    return 0;
}

注意getchar()返回值的类型是int型,它返回的是读取的字符的 ASCII 值。

所以咱们可以输出一堆字符的ASCII值。

#include <stdio.h>
int main() {
    int ch;
    printf("请输入一堆字符: ");
    while((ch = getchar())!=10)
        printf("%c-%d\n", ch, ch);
    return 0;
}

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金创想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值