在实际工作中,除非你是做上层应用或前端的,不然很少会直接用到人机交互界面。比如直接向自己负责的业务部分直接输入函数,输入字符,测试自己的代码。一般都是与别人联调,通过与其他人的接口接受参数输入。
但是在校招或社招的机试环节,为了快速考察面试者的能力情况,一般都会用到一些我们平常工作中不常用的一些输入的知识点。所以说呢一份工作再好,我们一般也不会干一辈子,总会因为这样那这样那样(离家太远,加班太多)的原因而重新选择另外的工作,这时候,笔试面试的一些基本技巧那就必须掌握。
抛出问题:
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()格式控制符的参数列表大全
输入注意事项:
开始:从第一个非空白字符(空行,空格,制表符,换行符)开始,如输入 __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;
}
简单放几个例程,后面会出一篇笔试机试碰到的实际需求解析。
转载请注明!