scanf读字符串的缺点和fgets的补充

scanf 在遇到带空格的字符串输入时 有两种做法:

  1. 在 %s 中带正则 ;
  2. 使用 fgets 来获取; 偶尔需要配合 getchar 来吃掉 \n
#include "cstdio"
#include "string"

// scanf 没读出来的东西 不代表它就不存在了 它还在缓冲区
// 程序没有退出,缓冲区就是不干净的。
int main() {

    // 第一次 name中包含的 name 遇到 空格停止了读取,
    // 缓冲区还剩 空格 和 Ma
    char name[30];
    scanf("%s", name);      //Jack Ma
    printf("%s\n", name);   //Jack

    // fgets 将缓冲区的 空格 和 Ma 还有\n读取了出来    注意看输出
    // char	*fgets(char * __restrict, int, FILE *);
    fgets(name, sizeof(name), stdin);
    printf("%s\n", name);   // Ma和\n
    return 0;
}

全部评论
谢谢大佬的无私分享
点赞 回复 分享
发布于 2023-02-14 10:54 山东
正好用到了,真及时
点赞 回复 分享
发布于 2023-02-14 11:06 新疆

相关推荐

02-08 20:56
已编辑
南京工业大学 Java
在等offer的比尔很洒脱:我也是在实习,项目先不说,感觉有点点小熟悉,但是我有点疑问,这第一个实习,公司真的让实习生去部署搭建和引入mq之类的吗,是不是有点过于信任了,我实习过的两个公司都是人家正式早搭好了,根本摸不到部署搭建的
点赞 评论 收藏
分享
评论
点赞
7
分享

创作者周榜

更多
牛客网
牛客企业服务