计算机的输入设备通常是键盘和鼠标,在C语言中,我们可以向计算机输入一些内容,这些内容可以是数值,也可以是字符串。本例将演示如何通过键盘输入数值,并将这些数值显示在屏幕上。对于C语言程序来说,如果需要显示计算机输入的内容,那么,首先需要知道这些内容的存放位置,这个位置通常是计算机中的内存地址,之后才可以将这些输入内容存放至这块内存中。而变量就充当了表示计算机内存区域的角色。如果我们要输入一个整型数值,那么就可以创建一个整型变量,将变量的地址告诉输入函数,可以将这个整数值放置在特定的地址之上,输入设备完成输入之后,如果没有出现运行错误,那么,我们就可以通过使用这个变量访问对应的输入内容。
刚才描述中的输入函数和之前使用过的输出函数printf参数类似,它们都是标准库中所声明的,都位于头文件stdio.h中,但输入函数对应的名称为scanf,它可以完成多种数据的输入功能。下面的代码表示输入一个整数值
scanf(“%d”, &year);
这行代码含有两个参数,第一个参数为格式化字符串,与printf格式化字符串相同,它同样也支持转换符(conversion specifier),对于不同类型数值,采用不同的转换符,比如本例中对于整型数值来说,采用了%d转换符;如果是字符串数据,那么对应的转换符为%s(后续教程会进行演示)。第二个参数为一个整型变量year,这个变量前面的符号&表示的含义为变量year所对应的内存地址,而不是变量本身(在后续指针教程会详细介绍地址操作符),这条语句的含义就是:从计算机输入设备(键盘)读取一个整型数值,并将其存放到整型变量year所对应的内存地址位置。
scanf函数不仅仅可以输入一个整数,它还可以输入多个整数,比如输入格式为“年/月/日”的内容,也可记作yyyy/mm/dd,其代码写法为:
scanf(“%d/%d/%d”, &year, &month,&day);
这行代码同时需要输入三个整数,整数之间使用斜线进行分割。我们通过代码来演示下scanf函数输入整数的用法,并将输入的内容再输出至屏幕上。
图1
代码第6行定义了三个整型变量,这三个变量两两之间使用逗号进行分割,类型都是int,也可以使用独立的定义,每行只定义一个整型变量,如下代码也是可以合法的。
int year;
int month;
int day;
每一行表示一个语句,以分号结束,而不是逗号。
在图1代码的第7行,程序首先输出提示语,给出用户输入日期的格式,需要注意的是printf函数中的日期格式应该与第8行代码中的输入格式的日期样式一致,都是yyyy/mm/dd的样式,否则提示和实际输入内容会对用户造成困惑。
第8行代码中的scanf函数第一个参数给出了实际输入的日期样式,用户在输入日期时,第一个参数为表示整数的年值,之后跟一个半角斜线字符/,再后面是整数的月份值,之后再跟一个半角斜线字符/,最后是整数的日值,输入完成之后按下回车键。这样就使用scanf函数完成了特定样式yyyy/mm/dd样式的日期输入。第9行代码对刚刚输入的内容进行了输出显示,为了保持日期样式的一致性,输出格式依旧采用yyyy/mm/dd的日期格式。
图2
至此,我们完成了计算机输入整数的功能,字符串输入和整型数值有所不同,在数组教程进行演示。
注:图1代码第一行是忽略了安全警告,因为微软视scanf为不安全函数,在代码中已经给出了3级警告,默认情况下是会导致构建失败,详见链接:编译器警告 (级别 3) C4996 | Microsoft Docs