笔试面试之输入函数总结-scanf()、gets()、getchar()

在实际工作中,除非你是做上层应用或前端的,不然很少会直接用到人机交互界面。比如直接向自己负责的业务部分直接输入函数,输入字符,测试自己的代码。一般都是与别人联调,通过与其他人的接口接受参数输入。
但是在校招或社招的机试环节,为了快速考察面试者的能力情况,一般都会用到一些我们平常工作中不常用的一些输入的知识点。所以说呢一份工作再好,我们一般也不会干一辈子,总会因为这样那这样那样(离家太远,加班太多)的原因而重新选择另外的工作,这时候,笔试面试的一些基本技巧那就必须掌握。
抛出问题:
C语言中,什么函数可以接受字母、数字、空格组成的字符串?
分析:C语言中都有哪些可以接受输入的函数?使用的注意事项是什么?有哪些是需要硬性背记的东西?(字母、数字和空格的ASCI码背记)

C语言中的输入函数主要包括:scanf()、gets()、getchar()

1.1 scanf()

	scanf()是最通用,也是使用最多的一个输入库函数,因为它可以读取不同格式的数据。
	解释:①取得从键盘上输入的数据
		  ②将输入的数据转化为指定输入格式
		  ③将转化后的数据赋给输入变量
该函数的一般形式为:
	scanf(“格式控制符列表”,地址列表)

详细解释:(仔细看注释!)

scanf("%s",地址列表);//注意双引号 “” 内只能有格式控制符!!!
					//地址列表中一定是地址,一个或多个地址
举例  
	  scanf("%c",&char1);//char1为字符型变量
					   //输入一个字符型数据,保存在变量char1中
	  scanf("%s",&str);//str为字符型变量
					   //输入一个字符串数据,保存在变量str[10]中	
					    // str[10]为数组		   
	  scanf("%d",&data);//data为整型变量
					   //输入一个整型数据,保存在变量data中
 多个变量输入
 	  scanf("%c %c %c",stor,name,color); //格式控制符用空格隔开。地址列表用逗号隔开		  
      scanf("%d%f",age,wages); //格式控制符不隔开。地址列表用逗号隔开		  
      scanf("%d,%f",age,wages); //格式控制符用逗号隔开,地址列表用逗号隔开
      							//在输入时需特别注意,两个变量间要加逗号隔开
 格式控制符的修饰符
  	  scanf("%9ld",&data);//data为整型变量
					   //输入一个9位的有效数据,保存在变量data中
					   //如:123456789
					   //从有效位开始读,读到第9位或空白字符截止
	  scanf("%c %*c %c",stor,name,color); //*为屏蔽修饰符,一般用不上
	  //当输入的数据为 abc时,stor保存的数据为a,color保存的数据为c,name未保存任何数据为,处于未赋值状态

scanf()格式控制符的参数列表大全scanf()格式控制符的参数列表大全
输入注意事项:
开始:从第一个非空白字符(空行,空格,制表符,换行符)开始,如输入 __ass,和直接输入ass效果其实是相同。(“_”代表空格)
结束:下一个空白字符结束,空白字符包括(空行,空格,制表符(tab),换行符)
正在输入时怎么打断并退出输入:
Windows下:Ctrl+z就相当于EOF
CTRL+c直接退出命令行
Linux下: Ctrl+d
**输出:**无(其实已经将想要的内容存放到了目标变量里了)

返回值:
n:成功读取的项数
0:如果没有读取任何项,且需要读取一个数字而用户却输入一个非数值字符串
EOF(-1):检测到“文件结尾”时,会返回EOF
总结
从键盘输入的都是文本,因为键盘只能生成文本字符:字母、数字和标点符号。如果要输入整数12345678,就要键入字符1、2、3、…7、8。
scanf()根据格式控制符和输入规则把输入的字符串转换成整数、浮点数、字符或字符串等形式。printf()根据格式控制符和输出规则把整数、浮点数、字符和字符串转换成字符串(文本)显示在屏幕上。

1.2 gets()

在读取字符串时,scanf()和格式控制符%s 一次只能读取一个单词,可是在程序中经常需要读取一整行的输入,而不仅是仅是一个单词,这样scanf()就显得捉襟见肘了。

输入:读取整行输入,直到遇到换行符,然后丢弃换行符,储存其余字符,并在末尾添加一个空字符使其成为一个C字符串。

gets(words);//words为字符型变量
			//输入一个有效的句子,保存在变量words[100]中
			//如:what is your name ?

特别提示:此函数使用起来是有bug的,一定要做好边界保护。(至于存在的问题以后再讲)

1.3 getchar()

输入:无参数
输出:无
返回值:int型(字符实际返回ASCII码)(实际上就是从缓冲区读出一个字符)

ch = getchar();//ch 为有符号整形型变量

总结:每次只能处理一个字符
用处:单个取字符;
取走无用字符;

2.实战举例

2.1

练习题目:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。

scanf()输入一个数组后,下面的代码作为输入的参考

int arrays[100];
while(scanf("%d",arrays) != EOF)
{
	..... 
}

2.2

在我们学习C语言的过程中经常会遇到一个小问题,就是在我们使用scanf这个函数时,尤其和循环体一起使用时,例如 while (scanf("%c %c", &a, &b) != EOF)

这种,我们在输入结束后,会按下回车来表示我们输入结束,但是这是一个循环,我们在按回车结束后,我们的这个回车字符\n会被下一次的循环中的scanf读取,就会产生不尽人意的效果。
解决如下:

#include <stdio.h>
int main()
{
    char a, b;
    while (scanf("%c %c", &a, &b) != EOF)
    {
        printf("%c %c\n", a, b);
    }
    return 0;
}
简单放几个例程,后面会出一篇笔试机试碰到的实际需求解析。

转载请注明!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiawucha159

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

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

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

打赏作者

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

抵扣说明:

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

余额充值