c语言程序执行时无法输入字符串,C语言程序设计中键盘输入数据的方法分析
1. 引言
C语言程序设计是一门实践性很强的语言课程,在程序设计过程中经常需要从键盘输入所需要的数据。C语言没有专门的输入语句,可以调用C语言编译系统提供的函数库中的库函数来实现。有些程序虽然调试成功了,但由于执行过程中输入数据出错了,导致程序的运行结果出错。所以如何正确输入程序运行的数据,很重要。
2. 库函数介绍
C语言中,可以接收键盘输入数据的库函数有格式化输入函数scanf,单个字符输入函数getchar,字符串输入函数gets。下面我们就对这几个函数的使用进行举例说明,并进行分析达到正确使用的目的。
函数一:scanf函数
主要功能是按指定格式从键盘读入数据,存入指定的存储单元中,以回车键字符作为输入结束标志。
函数的格式为:scanf (格式控制字符串,变量地址列表);
格式控制字符串由两部分组成,普通字符和格式说明符 [1] 。普通字符在键盘输入数据时将原样输入,格式说明符指定输入数据的类型,常见的有整型数据说明符%d,字符型数据说明符%c,单精度数据说明符%f等;变量地址列表,由地址运算符“&”后跟变量名组成。
例题1:整型数据和实型数据的输入
代码如下:
分析:先使用输出语句在屏幕上输出提示信息,请用户输入变量的值,这是使用输入语句时,常使用的操作方式。执行输入语句,等待用户从键盘输入数据。从程序中可以看出当只是使用%d或%f作为格式说明时,输入时可以以空格,TAB或回车键作为分隔符。
例题2:带分隔符的数据输入
代码如下:
运行程序:
输入10,20,30;则a = 10,b = 20,c = 30;特别注意中间的分隔符,不能少,否则出错。
例题3:带分隔符的数据输入
代码如下:
运行程序:
输入a = 10,b = 20,c=30
结果a = 10,b = 20,c = 30;特别注意中间的分隔符“a=”,“b=”,“c=”不能少,否则出错。
分析:以上例题可以看出,输入函数scanf格式控制部分中除格式说明字符外若还有其他字符,键盘输入数据时应输入与这些字符相同的字符。所以建议尽量少使用其他字符作为格式说明符。
例题4:字符型数据输入
代码如下:
运行程序:
若输入ABC则c1 = A,c2 = B,c3 = C赋值正确。
若输入A,B,C则c1 = A,c2=,c3 = B结果发现c2是空格符,c3是字符B,它们的值出错了。
分析:键盘输入字符型数据时,空格字符和转义字符会作为有效字符输入。字符型数据输入应连续输入,中间不能有空格字符,否则会作为有效字符输入。
例题5:多种类型数据输入
代码如下:
运行程序:
输入15A19.5,则a = 15,b = A,c = 19.5
若程序中的输入语句改为scanf(“%d%f%c”,&a,&c,&b);则执行时应这样输入数据
输入15,19.5A才能保证a = 15,b = A,c = 19.5。
分析:当同一输入函数语句进行不同类型的数据输入时,可以根据格式字符的含义分隔字符。如上例,程序运行中连续输入整型数据15,字符型数据“A”和实型数据19.5,使用字符数据“A”把整数和实数分隔了,可以实现不同变量的正确赋值。特别注意15与“A”字符之间不能有任何分隔符,否则会作为有效字符赋值给字符变量b。而修改后的输入语句,整型数据和实型数据之间需要空格字符进行分隔,而实型数据和字符型数据之间就不需要分隔符了。
由上可以得出结论,使用scanf函数输入数据时,格式控制部分尽量只使用格式控制字符,在输入整型和实型数据时使用分隔符分隔数据,在输入字符型数据时不使用任何分隔符。
函数二:getchar函数
函数的功能是从键盘读入一个字符 [2] 。
函数的格式是:getchar();函数的返回值是从键盘输入的字符。
例题6:单个字符数据输入
代码如下:
运行程序:输入A,则输出A
分析:getchar函数完全可以用scanf函数代替,不同之处前者语法简单,使用起来更简便,但使用范围小。而后者一条函数语句可以实现多个多种数据类型的数据的输入。根据程序输入数据的实际需要,合理选择输入函数。
函数三:gets函数
函数的功能是从键盘输入一个字符串放入字符数组或字符指针所指向的存储单元中 [3] ,以回车键作为输入结束,并自动添加字符串结束标志字符“\0”。
函数的格式为:gets (字符数组或字符指针)。特别注意:输入字符串的长度应小于字符数组的长度。
例题7:字符串数据输入
代码如下:
运行程序:
输入Hellotheworld!
输出Hellotheworld!
分析:gets函数从键盘接收一个字符串,且字符串中可以包含空格/tab字符。
scanf函数可以通过使用格式字符%s实现字符串的输入,但缺点是当遇到字符串中有空格/tab字符时,会自动认为字符串输入结束,不再接收数据输入。
如上例中,字符串输入语句若换为scanf(“%s”,str),依然是输入原字符串Hellotheworld!,则输出为Hello,因为遇到空格符后scanf函数就认为输入结束了。要想把字符串的内容都接收了,可以定义3个字符串来存储。代码如下:
但使用gets函数一条语句gets(str)就可以解决这个问题。
由上可以得出,scanf函数虽然功能强大,但在字符串的输入方面使用gets函数更方便,简洁。
3. 总结
通过以上的例题和分析可以得出如下结论:
1) scanf函数是格式输入函数,可以实现任意数据类型任意多个数据的输入。输入时根据不同的数据类型使用不同的分隔符,整型和实型数据使用空格/tab/空格字符分隔,字符型数据不使用分隔符。
2) getchar函数是字符输入函数,实现单个字符的输入,语法简单,仅实现字符数据的输入。
3) gests函数是字符串输入函数,实现字符数组或字符指针的赋值,接收数据时遇到回车字符就认为数据输入结束。
scanf函数功能最强大,很多时候可以替代getchar函数和gets函数。
4. 结束语
本文通过例题运行程序对C语言中的不同键盘输入函数进行了举例和分析,总结了每种函数的使用规则,提出了使用每种输入函数时的注意事项,确保正确使用它们输入数据。
c语言程序执行时无法输入字符串,C语言程序设计中键盘输入数据的方法分析相关推荐
- java语言中实现键盘输入_Java程序设计中的键盘输入数据的方法分析
1. 引言 高校中很多学校开设了Java语言程序设计课程,这是一门实践性很强的语言,在程序设计中经常需要从键盘随机输入所需要的数据,Java语言中的键盘输入数据没有像C语言给我们提供的scanf(), ...
- c语言编程 遍历字符串,请教大家一个C语言面试的编程题目 C语言:循环执行让用户输入一串字符串,如123456789......
导航:网站首页 > 请教大家一个C语言面试的编程题目 C语言:循环执行让用户输入一串字符串,如123456789... 请教大家一个C语言面试的编程题目 C语言:循环执行让用户输入一串字符串,如 ...
- 51单片机c语言程序执行顺序,51单片机程序执行流程详细分析
这里是一个循环,根据DJNZ指令的功能:每执行一次DJNZ RO, IDATALOOP就将R0的值减1,若R0的值不为0则就跳到IDATALOOP地址去.很显然这是一个循环,那么RO的值是多少呢,在以 ...
- 逆向易语言程序执行流程
首先在生成可执行文件后,易语言编译器会提示你"是否将此程序的相关依赖写出到同一目录中" 程序流程如下(先假设此程序相关依赖文件写出到同一目录中): 1:使用GetModuleFil ...
- Python编写程序,实现对输入字符串的大小写字母翻转(即大写变小写、小写变大写)操作
该程序通过两种方式来实现字母的翻转,一种是通过普通方式,另一种是通过自定义函数的方式来实现,该程序还对用户的输入可靠性进行判断,用户输入的必须是字母,如果输入数字,python程序会提示用户输入错误, ...
- 在百度或者淘宝搜索时,每次输入字符串都会出现搜索建议,例如输入北京,在搜索输入框下面会以北京为前缀,展示北京爱情故事,北京公交,北京医院等搜索词,实现这类技术所采用的数据结构是什么
在百度或者淘宝搜索时,每次输入字符串都会出现搜索建议,例如输入"北京",在搜索输入框下面会以北京为前缀,展示"北京爱情故事","北京公交", ...
- Hello程序的转换处理过程及程序执行时的数据流动过程
文章目录 1 Hello程序的转换处理过程 2 Hello程序执行时的数据流动过程 1 Hello程序的转换处理过程 经典的" hello.c "C-源程序: hello.c的AS ...
- 编写一个程序,清除用户输入字符串中的空格符并将之输出。
编写一个程序,清除用户输入字符串中的空格符并将之输出. 更多资料请点击:我的目录 写法一: #include <stdio.h> #include <string.h>int ...
- c语言程序快乐无极,PLSQL安装过程和SCOTT用户被锁的解决方法
python包下载地址 https://pypi.python.org/pypi http://www.lfd.uci.edu/~gohlke/pythonlibs/ 当在线安装安装不了时,需要将安装 ...
最新文章
- CCNA模拟器《Packet Tracer 4.11》
- 项目开发中,我们总能遇到的那么些坑,不仅是代码上的,还有第三方接口的...
- OpenCV VideoCapture与捕获设备,视频文件或图像序列一起使用的实例
- urlrewrite 保持 posturl
- ASP.NET MVC入门(二)---MVC数据传递
- perl大骆驼和小骆驼_你好骆驼:自动文件传输
- android Activity 之间传递复杂对象
- error: reference to non-static member function must be called sort(nums.begin(),nums.end(),cmp1)
- 蓝桥杯 ADV-233 算法提高 队列操作
- JVM笔记7:类加载器
- Spring Cloud分布式微服务系统中利用redssion实现分布式锁
- AtCoder Beginner Contest 171 A - αlphabet
- linux系统如何启动rpcbind,关于Centos6.8操作系统安装配置nfs、rpcbind服务后实现linux系统间文件数据共享(挂载mount共享路径)...
- Xposed+JustTrustMe解决SSL证书问题
- ubuntu 18.04 设置静态IP地址
- 计算机不能启动 无法验证数字签名,电脑提示“无法验证此文件的数字签名”的修复方法...
- 根据身份证获取用户的年龄,性别,生日等
- 【GCN-RS-Defence】GCN-Based User Representation Learning for Unifying Robust Recommendation and Frauds
- 电脑不兼容linux,解决方法:Linux存在图形卡不兼容问题
- 最全的阿里面试经验(一)
热门文章
- golang 中string和int类型相互转换
- Linux终端设备详解
- Android开发--AsyncTask异步任务(一)
- 快速整理excel_3小时整理了33个excel动图技巧,能快速提高工作效率,收藏备用吧...
- 玩转python轻松过二级 百度网盘,玩转Python轻松过二级
- Android日志系统分析之日志设备驱动程序代码阅读
- 学python还是go会php_现在想再学习一门编程语言,应该选择go还是python?
- 安卓加载asset中的json文件_Android中读取asset路径下本地json文件
- python中删除对象方法的区别_python中delattr删除对象方法的代码分析
- java dh密钥交换_java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换