程序dweight.c并不十分有用,因为它仅可以计算出一个箱子的空间重量。为了改进程序,需要允许用户自行输入箱子的尺寸。
为了获取输入,就要用到
scanf
函数。它是C函数库中与
printf
相对应的函数。
scanf
中的字母
f
和
printf
中的字母
f
含义相同,都表示“格式化”的意思。
scanf
函数和
printf
函数都需要使用
格式串
(format string)来指定输入数据或输出数据的形式。
scanf
函数需要知道将获得的输入数据的格式,而
printf
函数需要知道输出数据的显示格式。
为了读入一个
int
型值,可以使用下面的
scanf
函数调用:
scanf("%d", &i); /* reads an integer; stores into i */
其中,字符串
"%d"
说明
scanf
读入的是一个整数,而
i
是一个
int
型变量,用来存储
scanf
读入的输入。
&
运算符(➤11.2节)在这里很难解释清楚,因此现在只说明它在使用
scanf
函数时通常是(但不总是)必需的。
读入一个
float
型值时,需要一个形式略有不同的
scanf
调用:
scanf("%f", &x); /* reads a float value; stores into x */
%f
只用于
float
型变量,因此这里假设
x
是一个
float
型变量。字符串
"%f"
告诉
scanf
函数去寻找一个
float
格式的输入值(此数可以含有小数点,但不是必须含有)。
程序 计算箱子的空间重量(改进版)
下面是计算空间重量程序的一个改进版。在这个改进的程序中,用户可以输入箱子的尺寸。注意,每一个
scanf
函数调用都紧跟在一个
printf
函数调用的后面。这样做可以提示用户何时输入,以及输入什么。
dweight2.c
/* Computes the dimensional weight of a
box from input provided by the user */
#include <stdio.h>
int main(void)
{
int height, length, width, volume, weight;
printf("Enter height of box: ");
scanf("%d", &height);
printf("Enter length of box: ");
scanf("%d", &length);
printf("Enter width of box: ");
scanf("%d", &width);
volume = height * length * width;
weight = (volume + 165) / 166;
printf("Volume (cubic inches): %d\n", volume);
printf("Dimensional weight (pounds): %d\n", weight);
return 0;
}
这段程序的输出显示如下(用户的输入用下划线标注):
Enter height of box: 8 Enter length of box: 12 Enter width of box: 10 Volume (cubic inches): 960 Dimensional weight (pounds): 6
提示用户输入的消息(提示符)通常不应该以换行符结束,因为我们希望用户在同一行输入。这样,当用户敲回车键时,光标会自动移动到下一行,因此就不需要程序通过显示换行符来终止当前行了。
dweight2.c程序还存在一个问题:如果用户输入的不是数值,程序就会出问题。3.2节会更详细地讨论这个问题。