一、printf和scanf返回值
在学习中我们知道,scanf()和printf()为库函数,函数一般都有返回值,在这里我们先研究研究scanf()这个函数的返回值
打开cplusplus这个网站,搜索scanf这个函数发现声明为(网址为:https://cplusplus.com/)
int scanf ( const char * format, ... );
知道scanf函数的返回值为int
那么我们输入以下代码进行测试
#include<stdio.h>
int main()
{
int a;
printf("%d\n", scanf("%d", &a));
int b;
printf("%d\n", scanf("%d %d", &a,&b));
int c;
printf("%d\n", scanf("%d %d %d", &a, &b,&c));
return 0;
}
运行上述代码,可发现输出依次为1 2 3
即可知道scanf的返回值为输入的个数
同理我们寻找printf函数的返回值
int printf ( const char * format, ... );
#include<stdio.h>
int main()
{
int a = 0;
a = printf("abcdefg");
printf("\n%d\n", a);
a = printf("\n");
printf("%d\n", a);
a = printf("1234567\8\9");
printf("\n%d\n", a);
return 0;
}
根据输出为
abcdefg
7
1
123456789
9
我们不难发现printf函数返回值为输出字符串的个数
二、多组输入
先给大家一个示范题目
链接:三角形判断__牛客网
来源:牛客网
输入描述:
题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。
输出描述:
针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!”。
题目要求多组输入,共有三种方法
1、while(scanf()!=EOF)
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 0;
while (scanf("%d %d %d", &a, &b, &c) != EOF)//关键点
{
if (a + b > c && a + c > b && b + c > a)
{
if (a == b && b == c)
{
printf("Equilateral triangle!\n");
}
else if (a == b || b == c || a == c)
{
printf("Isosceles triangle!\n");
}
else
{
printf("Ordinary triangle!\n");
}
}
else
{
printf("Not a triangle!\n");
}
}
return 0;
}
我们右键EOF转到声明
发现 其声明如下
即EOF为(-1)
此时思考不难发现,scanf的返回值为输入的个数,在while循环中
scanf("%d %d %d", &a, &b, &c) != EOF
可让输入为条件,只要输入正常,便可以进行多组输入
补充:结束一般使用ctrl+z
2、while(~scanf())
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 0;
while (~scanf("%d %d %d", &a, &b, &c))//关键点
{
if (a + b > c && a + c > b && b + c > a)
{
if (a == b && b == c)
{
printf("Equilateral triangle!\n");
}
else if (a == b || b == c || a == c)
{
printf("Isosceles triangle!\n");
}
else
{
printf("Ordinary triangle!\n");
}
}
else
{
printf("Not a triangle!\n");
}
}
return 0;
}
'~'符号为按位取反
只要在scanf的返回值为-1的情况下才会结束
因为-1的补码为11111111 11111111 11111111 11111111
按位取反为00000000 00000000 00000000 00000000
此时才会结束
3、while(scanf()==3)
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 0;
while (scanf("%d %d %d", &a, &b, &c)==3)//关键点
{
if (a + b > c && a + c > b && b + c > a)
{
if (a == b && b == c)
{
printf("Equilateral triangle!\n");
}
else if (a == b || b == c || a == c)
{
printf("Isosceles triangle!\n");
}
else
{
printf("Ordinary triangle!\n");
}
}
else
{
printf("Not a triangle!\n");
}
}
return 0;
}
原因同上,均是利用了scanf返回值的方法