首先先来看几道关于多组输入的题!
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的线段图案。
输入描述:
多组输入,一个整数(1~100),表示线段长度,即“*”的数量。
输出描述:
针对每行输入,输出占一行,用“*”组成的对应长度的线段。
从上述例题中我们不免看出用到了一个while循环 但while循环里面为什么会用到scanf 函数呢?
下面我们就将这两个函数展开 来分析一下
while循环
while循环的一般形式为:
while(表达式)
{
语句块
}
意思是先判断表达式(循环条件)的值,当表达式里面的值为真(非0)时,执行“语句块”(循环体);执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”,直至表达式的值为假(0)。跳出循环,执行while后面的代码。
下面咱们再说一下scanf()语句
scanf 是 scan format 的缩写,意思是格式化扫描,也就是从键盘获得用户输入,和 printf 的功能正好相反。
下面看一个例子:
输出结果:
从键盘输入2,按下回车键,scanf() 就会读取输入数据并赋值给变量 a;本次输入结束,接着执行下一个 scanf() 函数,再从键盘输入 3,按下回车键,就会将 3 赋值给变量 b,都是同样的道理。
第 8 行代码中,scanf() 有两个以空格分隔的%d
,后面还跟着两个变量,这要求我们一次性输入两个整数,并分别赋值给 c 和 d。注意"%d %d"
之间是有空格的,所以输入数据时也要有空格。对于 scanf(),输入数据的格式要和控制字符串的格式保持一致。
与printf 不同的是scanf 的变量前要带一个&
符号。&
称为取地址符,也就是获取变量在内存中的地址。
数据都是以二进制保存在内存中,为了方便管理我们给每个字节分配一个编号,这个编号就叫做地址。对于int a 就是分配四个字节的空间。我们要使用&去获得他们的地址,scanf会根据地址吧读取到的数据写入内存中。
同时scanf 还有一个重要的东西 返回值 我们看下面的代码
有没有发现一个神奇的现象其输出的结果是3.
那当我们输入两个数字呢
当我们不输入呢 ,我们用输入错误数据类型来代替
输出结果是0
因此得出结论其返回值是你有效输入的个数。
对了还有一个很重要的就是EOF ,也就是end of file,字面意思也就是文件结束。通常EOF被定义为-1。
需要注意的是,EOF并不是一个实际的字符或整数值,而是一个特殊的标志,用于指示文件结束或输入流结束的状态。
在不同的操作系统和编译器中,EOF的值可能会有所不同,但通常都是一个负整数(通常为-1)。因此,将函数的返回值与EOF进行比较,可以跨平台地判断文件结束。
现在我们知道了while循环的原理和scanf 的返回值 再加上EOF,我们把三个结合起来就是多组输入while(scanf("%d",&a)!=EOF
{
}
今日鸡汤:今日事,今日毕