机试必备的输入输出函数
在机试时,通常都是根据输入数据,做一些处理,然后输出,从而就导致输入输出这种基本的东西显得尤为重要,我简单说一下机试的时候该怎么用
1.针对int类型的输入输出
比如要求是根据两个输入的数据进行处理,然后输出一个数据,下面代码我用a和b代表输入,c代表输出那么我可以这样使用scanf和printf
while(scanf("%d%d,&a,&b") != EOF) //注意双引号中的%d%d中间不要有逗号
printf("%d\n",c);
scanf此处这么用很常见,机会所有的机试我都是这么处理的,这样可以一直循环等待输入数据,再做处理,最后输出
printf这块要注意题中输出格式要求,上面我是加了一个换行符,有时候是需要用空格的。
2.输入一个字符
把上面那种情况中的%d换成%c就可以了
3.针对字符串的输入输出
这种也是比较简单的,直接使用下面的代码即可
char str[100];
scanf("%s",str)
不过这个时候要注意str所开辟的空间是100,这个要根据题目描述,一般机试题都会说这个长度的,要是没有说长度,就需要动态开辟空间的方式是最保险
4.获取有空格的字符串
这个时候可以使用gets,不能采用scanf,或者采用多个scanf来获取有空格的字符串,只是这种情况下,会获取多个字符串,但在处理的时候要考虑这多个字符串实际上是一个字符串的情况,下面我们就看一个这种列子
第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字符,写出一个程序,输出输入字符串中该字符的出现次数。(不区分大小写字母),数据范围1 <= n <= 1000
下面是对应的代码:
#include "stdlib.h" #include "stdio.h" int main() { char str[1000] = {'\0'}; char c = 0; int i = 0; int num = 0; gets(str); scanf("%c", &c); while(str[i] != '\0') { //number if(c >= 'a') { if((str[i] == c) || (str[i] == c - ('a' - 'A'))) { num++; } } else if(c >= 'A') { if((str[i] == c) || (str[i] == c + ('a' - 'A'))) { num++; } } else { if(str[i] == c) num++; } i++; } printf("%d \n", num); return 0; }
从代码看,输入输出有三个地方,分别是第10行和第12行,第39行
第10行,gets(str),采用gets是因为输入数据含有空格,为了处理上的简化,采用了gets,不过这个函数也有自己的弊端,不是强烈推荐的方式,应付机试还是可以采用的,此处的str就是在刚开始就开辟了空间,这个就是根据题目描述的数据范围不大于1000,为了符合极端情况,就采用char str[1000] = {'\0'}来开辟空间了,这样处理省事些
第12行,这个比较简单,就是获取一个字符,采用上面说的第一种情况的方式,直接 scanf("%c", &c)获取就可以了
第39行,此处我的输出函数printf("%d \n", num);中特意加了一个空格和换行符,这个就是提醒大家,在输出时一定要看清楚题中要,特别是输出数据较多的情况下,要针对什么时候加空格,什么时候加换行
实际上scanf比我上面说的要复杂,但基本上能应付机试,祝大家机试都顺利
#机试#