使用scanf()

86 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

scanf()的工作原理

用于读取不同格式的数据。一般键盘输入的文本的字符是:字母,数字和标点符号。如果要输入2003,就要输入字符2,0,0,3。如果将其存储为数值而不是字符串,程序就必须把字符依次转化为数值。 scanf()把输入的字符串转换成整数,浮点数,字符或字符串。这就是scanf()要做的。

scanf()和printf()类似,也使用格式字符串和参数列表。scanf()中的格式字符串表明字符输入流的目标数据类型。两个函数主要的区别在参数列表中。printf()函数使用变量,常量和表达式,而scanf()函数使用指向变量的指针。需要记住两点规则:

  • 如果scanf()读取基本变量类型的值,在变量名前加一个&。
  • 如果scanf()把字符串读入字符数组中,不要使用&。

举一个简单例子演示这两条规则使用

#include <stdio.h>
int main(){
    int age;  //变量
    float assets;  //变量
    char pet[30];
    printf("Enter your age,assets,and favorite pet.\n");
    scanf("%d %f",&age,&assets);  //要使用&
    scanf("%s",pet);     //字符数组不使用&
    printf("%d $%.2f %s\n",age,assets,pet);
    return 0;
}

运行结果

Snipaste_2022-08-08_17-31-49.png

scanf()函数使用空白(换行符,制表符和空格)把输入分成多个字段。在依次把转换说明和字段匹配时跳过空白。注意,上面示例的输入项(粗体部分是用户的输入)分成了两行。只要在每个输入项之间输入至少一个换行符,空格或制表符即可,也可以在一行输入。

scanf()的转换说明

转换说明含义
%c把输入解释成字符
%d把输入解释成有符号十进制整数
%e %f %g %a把输入解释成浮点数
%i把输入解释成有符号十进制整数
%o把输入解释成有符号八进制整数
%p把输入解释成指针
%s把输入解释成字符串,从第一个字符开始,到下一个空白字符之前的所有字符都是输入
%u把输入解释成无符号十进制整数
%x把输入解释成有符号十六进制整数