首页 > 代码库 > scanf()的使用

scanf()的使用

 

scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

如下面代码:

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    printf("a=%d\tb=%d\n",a,b);
}

运行结果:

4
3
a=4     b=3

--------------------------------
Process exited after 3.202 seconds with return value 8
请按任意键继续. . .

此段代码要求用户输入a,b的数值。

在scanf语句的格式串中由于没有非格式字符在“%d%d”之间作输入时的间隔,所以永无在输入的时候两个数据之间需要用空格或者回车间隔。

格式字符:

 d格式字符。用来输出十进制整数。有以下几种用法:%d,按整形数据的实际长度输出。%md,m为指定的输出字段的宽度。%ld,输出长整形数据。
 o格式符,以八进制整形式输出整数。
 x格式符,以十六进制数形式输出整数。
 u格式符,用来输出unsigned型数据,即无符号数,以十进制形式输出。
 c格式符,用来输出一个字符。
 s格式符,用来输出一个字符串。
 f格式符,用来输出实数(包括单双精度),以小数形式输出。
 e格式符,以指数形式输出实数。
 g格式符,用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出是占宽度较小的一种),且不输出无意义的零。
 p格式符,用于变量地址的输出。
 %[scanfset]:scanfset 有两种形式:一种是以非 “^” 字符开头的 scanset , 表示在读入字符串时将匹配所有在 scanfset 中出现的字符,遇到非scanfset 中的字符时输入就结束;另外一种形式是以 “^” 字符开头的scanfset ,表示在读入字符串时将匹配所有不在scanfset 中出现的字符,遇到scanfset 中的字符输入就结束。
         例如:  scanf("%[^,]",a);   //在输入 ‘,‘ 的时候后面输入的内容将不会接收
其余出现的都可以理解为非格式字符。
 
“*”符
用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d,%*d,%d",&a,&b);m n
a=m b=  c=n
--------------------------------
Process exited after 2.551 seconds with return value 11
请按任意键继续. . .printf(
"a=%d\tb=%d",a,b); }在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
4,3,2
a=4     b=2
--------------------------------
Process exited after 5.453 seconds with return value 7
请按任意键继续. . .

在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。

C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。

在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。

例:

下面的代码因为中间没有使用空格等间隔,所以a=m,b=空格,c=n。

#include<stdio.h>
int main()
{
    char a,b,c;
    scanf("%c%c%c",&a,&b,&c);
    printf("a=%c b=%c c=%c",a,b,c);
}
m n
a=m b=  c=n
--------------------------------
Process exited after 2.551 seconds with return value 11
请按任意键继续. . .

 

scanf()的使用