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

C从控制台(stdin)输入带空格的字符串到字符数组中

用scanf("%s",array); 的话遇到空格就停止接收后面的字符了,那怎么才能接收带空格的字符串呢?

1.用 gets() ,它可以接收带空格的字符串, 直到回车才结束输入

char buf[80]={0};
gets(buf);   //可以读取空格, 回车结束输入

2.使用"%[^\n]" 也是可以接收输入一个带空格的字符串,直到回车结束接收

char buf[10] = {0};

scanf("%[^\n]",buf); //可以读取空格,回车结束输入

注意:scanf_s("%s",buf,10); 不能接收带空格的字符串输入,虽然它的指定长度是10, 但是遇到空格时即使没有满10个字符它也自动结束输入了。

 

[…]和[^…]是scanf中一种很少见到但是很有用的转换字符串

#include <stdio.h>

main()

{

char strings[100];

scanf("%[1234567890]”,strings);

printf(“%s”,strings);

return (  0 );

}

运行输入:125eqe后, 打印结果是 125.

它的作用是从输入的第一个字符开始算起,到地n个字符如果都是中括号中的字符,而第n+1个字符不是这个中括号中的字符,则提取前面n个字符,并自动添加一个结束符号,此外第n+2个算起不管是不是这个中括号中的字符,都不再提取。如:

scanf("%[1234567890]",strings ); 如果输入123567ascds3838 那么输出的结果是:123567  而不是:1235673838 。 要注意的是:面对scanf("%[1234567890]",strings); 输入的第一个字符必须是这个中括号中的数字它才开始提取,否则将输出乱码,如输入:adc123djfdj8907907, 这里输入的第一个字符是字符而不是中括号中的数字,那么将输出乱码,而不是把后面的那些数字输出来!

还有需要注意: 方括号两边不能有空格,如scanf("%[  123  ]",strings); 这样是错误的,最终得不到正确的结果的,此外如果想把输入的字符中当碰到数字就截断时可以使用如下形式:

scanf("%[^1234567890]",strings) ; 这样当输入的字符中遇到包含中括号的数字时就自动结束接收,例如输入:-=-=sakjfd123, 那么打印strings的结果将是::-=-=sakjfd, 但是要注意如果一开始就输入数字那么就会显示乱码,如输入:1265423sdjfksdkf, 那么结果将会显示乱码!

"%[^\n]" 之所以能接收带空格的输入,是因为它接收所以的字符输入只要不输入\n (即回车键的转义符)它就一直接收,直到超过变量能够接收的长度,遇到\n 则自动结束输入操作。

下面是MSDN的scanf格式参数的允许情况,注意%[]在最后

Conversion Argument Conversion
Specifier Type Function Base
%c char x[]
%lc wchar_t x[]
%d int *x strtol 10
%hd short *x strtol 10
%ld long *x strtol 10
%e float *x strtod 10
%le double *x strtod 10
%Le long double *x strtod 10
%E float *x strtod 10
%lE double *x strtod 10
%LE long double *x strtod 10
%f float *x strtod 10
%lf double *x strtod 10
%Lf long double *x strtod 10
%g float *x strtod 10
%lg double *x strtod 10
%Lg long double *x strtod 10
%G float *x strtod 10
%lG double *x strtod 10
%LG long double *x strtod 10
%i int *x strtol 0
%hi short *x strtol 0
%li long *x strtol 0
%n int *x
%hn short *x
%ln long *x
%o unsigned int *x strtoul 8
%ho unsigned short *x strtoul 8
%lo unsigned long *x strtoul 8
%p void **x
%s char x[]
%ls wchar_t x[]
%u unsigned int *x strtoul 10
%hu unsigned short *x strtoul 10
%lu unsigned long *x strtoul 10
%x unsigned int *x strtoul 16
%hx unsigned short *x strtoul 16
%lx unsigned long *x strtoul 16
%X unsigned int *x strtoul 16
%hX unsigned short *x strtoul 16
%lX unsigned long *x strtoul 16
%[...] char x[]
%l[...] wchar_t x[]
%% none

转载于:https://www.cnblogs.com/AI-Algorithms/p/3390270.html

相关文章:

  • Daily Scrum: 2012/11/12
  • Non-Rule Package常用表名
  • 通用技术01--Git运用
  • 数据分析01--pandas数据结构浅析
  • python编程01 -- 基础知识
  • 通用技术06--RabbitMQ
  • 通用技术05--Docker
  • 通用技术07--JWT授权
  • python框架01 -- Django部署
  • 数据分析02--spark运用
  • Java编程01--基础知识总结
  • python编程03 -- 十大排序算法
  • python编程08 -- 自定义实现列表类
  • python框架05 -- 浅谈Django微信小程序后台开发
  • python编程06 -- 连接MysqlAPI
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《Java编程思想》读书笔记-对象导论
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【面试系列】之二:关于js原型
  • 230. Kth Smallest Element in a BST
  • canvas 五子棋游戏
  • ES学习笔记(12)--Symbol
  • JavaScript 奇技淫巧
  • Java比较器对数组,集合排序
  • js面向对象
  • Octave 入门
  • Python学习笔记 字符串拼接
  • Shell编程
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • SpringCloud集成分布式事务LCN (一)
  • text-decoration与color属性
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • HanLP分词命名实体提取详解
  • ![CDATA[ ]] 是什么东东
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $forceUpdate()函数
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (三)elasticsearch 源码之启动流程分析
  • (三)uboot源码分析
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (算法)Game
  • (学习日记)2024.01.19
  • (转)EXC_BREAKPOINT僵尸错误
  • ***利用Ms05002溢出找“肉鸡
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查