引入
首先我们来看看牛客网上的一道题目
描述: 据说智商140以上者称为天才,KiKi想知道他自己是不是天才,请帮他编程判断。输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。 输入描述: 多组输入,每行输入包括一个整数表示的智商。 输出描述: 针对每行输入,输出“Genius”。
这还不简单,有些老铁不假思索给出了下面一段代码
#include <stdio.h>
int main() {
int a=0;
if(a>=40)
{
printf("Genius) ;
}
return 0;
}
但是真的是这样做的吗?
细心的老铁在读题时可能会产生疑问,多组输入,每行输入包括一个整数表示的智商。针对每行输入,输出“Genius。多组输入,也就是这个程序能判断多次,而上述代码显然只判断一次就结束了,并不满足题目要求。
显然这里要用到循环,那么具体怎么实现呢,接下来就要介绍scanf函数的一个用法了。
scanf函数的返回值
scanf函数介绍 这个网站叫做cplusplus,里面有关于各种库函数的详细介绍,有兴趣的老铁可以去研究下。这里着重介绍scanf的返回值。
我们经常这样写代码
int n=0;
scanf("%d",&n)
编译器经常会报这样一个警告(我用的是VS)
scanf函数其实是有返回值的,只不过我们平常根本不需要接收它,这样写没有问题,不必管这个警告。
那么scanf的返回值是什么样的呢?看看介绍吧
这段文字的主要意思是这样的:
scanf函数读取数据,如果读取成功的话,返回的是读取到的数据的个数;如果读取失败,返回的是EOF
那么EOF又是什么呢?EOF是end of file 的缩写,它是文件结束的标志,这个后续会讲到,不必深究。
在VS中,EOF是一个常量,他的值为-1,这是库里定义的。
多组输入数据的标准写法
知道scanf的返回值后,这个题目就可以完成了,代码如下
#include <stdio.h>
int main() {
int a=0;
while(scanf("%d",&a)==1)
{
if(a>=140)
{
printf("Genius");
}
}
return 0;
}
scanf函数每次从屏幕上读取一个整数,如果成功的话就会返回1,满足条件,进入循环,如果读取失败(比如读取到‘a’),就会返回EOF,不满足条件,跳出循环结束。
代码也可以这样写
#include <stdio.h>
int main() {
int a=0;
while(scanf("%d",&a)!=EOF)
{
if(a>=140)
{
printf("Genius");
}
}
return 0;
}
这种写法就是输入多组数据时的一个标准模板。
例题
下面再来看一个题目
描述 KiKi想知道从键盘输入的两个数的大小关系,请编程实现。 输入描述: 题目有多组输入数据,每一行输入两个整数(范围-231~231-1),用空格分隔。 输出描述: 针对每行输入,输出两个整数及其大小关系,数字和关系运算符之间没有空格,详见输入输出样例。
代码实现:
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
while(scanf("%d%d", &num1, &num2) != EOF)
{
if(num1>num2)
printf("%d>%d\n", num1, num2);
else if(num1<num2)
printf("%d<%d\n", num1, num2);
else
printf("%d=%d\n", num1, num2);
}
return 0;
}
也可以这样写
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
while(scanf("%d%d", &num1, &num2) == 2)
{
if(num1>num2)
printf("%d>%d\n", num1, num2);
else if(num1<num2)
printf("%d<%d\n", num1, num2);
else
printf("%d=%d\n", num1, num2);
}
return 0;
}
今天的分享就到此结束了,希望能对大家有所帮助。