当前位置: 首页 > news >正文

C语言 字符串输入输出函数、scanf(“%[^\n]“,)可输入空格 、fgets删除换行符

字符串输入函数:

         scanf("%s",数组名) 
        gets(数组名) 
        fgets()  --- 文件流输入函数

函数原型:
        int scanf( const char *format, ... );
        char *gets( char *str );
        char *fgets(char *str,int num,FILE *stream);

区别:
        scanf()把空格字符识别为输入结束
        gets() 会把空格字符也存到数组中
       相同:遇到换行符\n输入结束

                 fgets()会把换行字符\n也会吸收到数组中.

代码:(scanf 和 gets )

#include <stdio.h>
#include <string.h>int main(void)
{char r_buf1[30]={0};char r_buf2[30]={0};int len;//测试scanfscanf("%s",r_buf1);len = strlen(r_buf1);printf("scanf_len=%d\r\n",len);printf("scanf=%s\r\n",r_buf1);// //测试gets// gets(r_buf2);// len = strlen(r_buf2);// printf("gets_len=%d\r\n",len);// printf("gets=%s\r\n",r_buf2);return 0;
}

现象: (scanf 和 gets )

scanf()跳过空格继续输入的处理: 

         scanf("%[^\n]",r_buf1);

        %[^\n] 匹配除换行符以外的任何字符序列;可以指定字符 ,如 %[^b]
        即直到遇到换行符或者指定字符才结束输入,否则默认遇到空格结束输入。

#include <stdio.h>
#include <string.h>int main(void)
{char r_buf1[30]={0};int len;//测试scanf读取空格scanf("%[^\n]",r_buf1);  //测试指定字符 scanf("%[^b]",r_buf1);len = strlen(r_buf1);printf("scanf_len=%d\r\n",len);printf("scanf=%s\r\n",r_buf1);return 0;
}

fgets()代码与现象:

#include <stdio.h>
#include <string.h>int main(void)
{char r_buf[30]={0};int len;//测试fgetsfgets(r_buf,30,stdin);len = strlen(r_buf);printf("fgets_len=%d\r\n",len);printf("fgets=%s\r\n",r_buf);return 0;
}

        字符数组有效字符为6个 并且多输出了一次换行

        因为  fgets()会把换行字符\n也会吸收到数组中.

        可以把字符串数组的第5号元素改为'\0', 即能删除多出的一次换行
        r_buf[5]='\0';        下面有讲到通过strcspn函数定位到\n的元素索引位置的函数。

strcspn() 处理fgets的换行符

头文件:#include <string.h>

函数原型:size_t strcspn( const char *str1, const char *str2 );        size_t 等于 int 类型

函数功能:函数返回str1 开头连续n个字符都不含字符串str2内任何某个字符的字符数。

#include <stdio.h>
#include <string.h>int main(void)
{/*测试strcspn*/int n;char str1[]= "hello world";char str2[]= "abo";n = strcspn(str1,str2);printf("n=%d\r\n",n);/*删除fgets吸收的换行符\n*/char r_buf[30]={0};int len;fgets(r_buf,30,stdin);len = strcspn(r_buf,"\n");r_buf[len] = '\0';printf("fgets=%s\r\n",r_buf);return 0;
}

字符串输出函数:

        printf(“xxx%s”,数组名)
        puts(数组名)  
        fputs()   --- 文件流输出函数

函数原型:
        int printf( const char *format, ... );
        int puts( char *str );
        int fputs( const char *str, FILE *stream );

区别:
       printf()可以放描述语 
        puts()自动加换行符
相同:默认输出到STDOUT标准输出上.

http://www.lryc.cn/news/504172.html

相关文章:

  • 【蓝桥杯每日一题】推导部分和——带权并查集
  • Linux 磁盘满了怎么办?快速排查和清理方法
  • 【专题】2024年中国新能源汽车用车研究报告汇总PDF洞察(附原数据表)
  • 数据结构之链表笔试题详解
  • 结构化的Prompt
  • 【数字化】华为数字化转型架构蓝图
  • 最新全开源IM即时通讯系统源码(PC+WEB+IOS+Android)部署指南
  • go 跨平台打包
  • C++ 给定字符串,然后给出开始要取的位置,返回取到的信息
  • 【树莓派4B】MindSpore lite 部署demo
  • Idea汉化插件Datagrip汉化插件
  • 精彩回顾|Cocos开发者沙龙长沙站
  • 算法日记 49 day 图论(A*算法)
  • 服务器批量清理redis keys,无法适用客户端必须直连的情况
  • Grafana配置告警规则推送企微机器人服务器资源告警
  • 数字货币金融研究,深度学习虚拟币价格预测 数据集 市值top20 (2014年—2024年)
  • druid.properties图标是齿轮
  • 【图像处理】利用numpy、opencv、python实现车牌检测
  • ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor‘
  • Android无障碍服务监听实现自动点击按钮
  • Deveco Studio首次编译项目初始化失败
  • Redis缓存应用场景【Redis场景上篇】
  • 线程与进程基础
  • electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题
  • OpenCV的简单练习
  • JAVA:建造者模式(Builder Pattern)的技术指南
  • 12.11函数 结构体 多文件编译
  • Debezium系列之:使用Debezium采集oceanbase数据库
  • VMware虚拟机 Ubuntu没有共享文件夹的问题
  • spring使用rabbitmq当rabbitmq集群节点挂掉 spring rabbitmq怎么保证高可用