scanf函数详解(摘自CPrimer第六版中文版第四章)

4.4.5 使用 s c a n f ()
刚学完输出, 接下来我们转至输入—— 学习 scanf ( ) 函数。C 库包含了多个输入函数, scanf ()是最通用的一个, 因为它可以读取不同格式的数据。当然, 从键盘输入的都是文本,因为键盘只能生成文本字符: 字母、数字和标点符号。如果要输入整数 2014 , 就要键入字符 2、0、1 、4。如果要将其储存为数值而不是字符串, 程序就必须把字符依次转换成数值, 这就是 scanf ()要做的。scanf ()把输入的字符串转换成整数、浮点数、字符或字符串, 而 printf ()正好与它相反,把整数、浮点数、字符和字符串转换成显示在屏幕上的文本。

scanf ( )和 printf ( ) 类似, 也使用格式字符串和参数列表。scanf ()中的格式字符串表明字符输入流的目标数据类型。两个函数主要的区别在参数列表中。printf ( ) 函数使用变量、常量和表达式,而 scanf ( )函数使用指向变量的指针。这里, 读者不必了解如何使用指针,只需记住以下两条简单的规则:
• 如果用 scanf ( ) 读取基本变量类型的值, 在变量名前加上一个&;
• 如果用 scanf ( )把字符串读入字符数组中, 不要使用&。程序清单 4.15 中的小程序演示了这两条规则。

程序清单 4.15      input.c 程序

#include <stdio.h>

int main(void)
{
    int age;
    float assets;
    char pet[30];
    printf("Enter your age,ssets,and favorite pet . \n");
    scanf("%d %f",&age,&assets);
    scanf("%s",pet);
    printf("%d $%.2f %s \n",age,assets,pet);

    return 0;
}

下面是该程序与用户交互的示例:
Enter your age , as ssets , and favorite pet .
38
92360.88 llama
38 $92360. 88 llama
scanf ()函数使用空白(换行符、制表符和空格)把输入分成多个字段。在依次把转换说明和字段匹配时跳过空白。注意, 上面示例的输入项(粗体部分是用户的输入)分成了两行。只要在每个输入项之间输入至少一个换行符、空格或制表符即可, 可以在一行或多行输入:

Enter your age, assets , and favorite pet.

42

2121.45

guppy

42   $2121.45  guppy


唯一例外的是%c转换说明。根据% c , scanf ()会读取每个字符, 包 括空白。我们稍后详述这部分。
scanf ( )函数所用的转换说明与 printf ( )函数几乎相同。主要的区别是,对于 float类型和double类型 ,printf () 都使用 %f、%e、%E、%g、%G 转换说明。而 scanf( )只把它们用于 float 类型,对 于 double类型时要使用 l 修饰符。表 4.6 列出了 C99 标准中常用的转换说明。

 

                   表 4.6 ANSIC 中 scanf( ) 的转换说明

scanf函数详解(摘自CPrimer第六版中文版第四章)

 

上一篇:HDU-4513-完美队形2(Manacher变形)


下一篇:.NET中的Attribute(二)----理解