一、scanf函数的使用
scanf函数功能:把输入的字符串转换成各种形式(整数、浮点数、字符、字符串)
scanf函数是printf函数的逆操作
scanf函数与printf函数一样使用控制字符串和参数列表
控制字符串指出输入将被转换成的格式
主要区别在参数列表:与printf函数使用变量名、常量、表达式不同,scanf函数使用指向变量的指针,具体的规则:
1)如果使用scanf()读取某种基本变量类型的值,需在变量名之前加上&
2)如果使用scanf()读取一个字符串(读到一个字符型数组中),不需要加&
示例代码:
/* test of scanf function */
#include <stdio.h>
int main(void)
{
char Letter;
char Letters[20];
printf("Please enter one letter and some letters. \n");
scanf("%c", &Letter);
scanf("%s", Letters);
printf("The letter entered is %c. \n", Letter);
printf("The letters entered are %s. \n", Letters);
return 0;
}
运行结果:
二、scanf函数的转换说明符
scanf()函数所用转换说明符与printf()函数几乎完全相同
区别:printf()把%f、%e、%E、%g和%G同时用于float类型和double类型;scanf()只把他们用于float类型,用于double类型时要求使用l修饰符
转换说明符 | 意义 |
%c | 把输入解释为一个字符 |
%d | 把输入解释为一个有符号十进制整数 |
%e, %f, %g, %a | 把输入解释为一个浮点数(%a是C99标准) |
%E, %F, %G, %A | 把输入解释为一个浮点数(%A是C99标准) |
%i | 把输入解释为一个有符号十进制整数 |
%o | 把输入解释为一个有符号八进制整数 |
%p | 把输入解释为一个指针(一个地址) |
%s | 把输入解释为一个字符串:输入的内容以第一个非空白字符作为开始,并且包含直到下一个空白字符的全部字符 |
%u | 把输入解释为一个无符号十进制整数 |
%x, %X | 把输入解释为一个有符号十六进制整数 |
修饰符 | 意义 |
* | 滞后赋值 示例:"%*d" |
digit(s) | 最大字段宽度:在达到最大字段宽度或者遇到第一个空白字符时,停止对输入项的读取 示例:"%10d" |
hh | 把整数读作signed char或unsigned char 示例:"%hhd"、"%hhu" |
ll | 把整数读作long long或unsigned long long(C99) 示例:"%lld"、"%llu" |
h,l或L | %hd和%hi:该值将会存储在一个short int中 %ho、%hx、%hu:该值将存储在一个unsigned short int中 %ld和%li:该值将会存储在一个long中 %lo、%lx、%lu:该值将会存储在一个unsigned long中 %le、%lf、%lg:该值以double类型存储 %Le、%Lf、%Lg:该值以long double类型存储 |
三、scanf函数的返回值
scanf()函数返回成功读入的项目的个数;如果没有读取任何项目,scanf()会返回值0;当检测到“文件结尾”时,scanf()返回EOF