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 na=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
请按任意键继续. . .
时间: 2024-08-04 18:33:33

scanf()的使用的相关文章

VS2015使用scanf报错的解决方案

1.在程序最前面加: #define _CRT_SECURE_NO_DEPRECATE 2.在程序最前面加: #pragma warning(disable:4996) 3.把scanf改为scanf_s: 4.无需在程序最前面加那行代码,只需在新建项目时取消勾选"SDL检查"即可: 5.若项目已建立好,在项目属性里关闭SDL也行:我用的VS是中文版的 (1).我将"是"改为"否",编译同样的代码时出现了如下的警告,不是报错: (2).如果不改,

当scanf接收单字符遇上循环

╮(╯▽╰)╭,没想到有一天自己也能就某个标准库函数,谈谈它的某个缺陷. 但我了解,只要有了这开始,"想必是极好的". 这个问题是之前在写一个数据结构的程序时遇到的.现在简化了一下,与大家分享, 一直挺赞同这句话的"Talk is cheap,show me the code". So 代码来了. 下面的代码是有问题的,就是scanf在循环第二次的时候,"%c"接收到的数据不是我们输入的数据,而是换行符. #include <stdio.h

scanf函数用法小记

By francis_hao    Aug 26,2017 scanf – 输入格式转换 概述 #include <stdio.h>int scanf(const char *format, ...); 描述 该函数通过format扫描标准输入stdin, format包含转换描述说明,如果需要转换,那么转换后的结果存储在format之后的指针参数中,每个指针参数类型必须要正确对应转换说明.如果format中转换说明符的个数,超过了后面的指针参数,那么结果将是未定义的.反过来,如果指针参数的数

scanf() gets() fgets()使用注意事项

1.scanf() 遇到'\n'停止从输入缓冲区中接收,接收完后'\n'还存在于缓冲区中.当输入的字符数少于缓冲区大小时,字符后面有自动补上'\0',当输入字符大于缓冲区时,也直接拷贝到缓冲中,因此缓冲区大小应注意以免产生段错误. 2.gets() 当输入的字符串低于缓冲区长度时,以'\n''\0'结尾,此时缓冲区中什么也没留下:当输入的字符串大于缓冲区长度时,也会全部存入缓冲区中,注意缓冲区大小以免产生段错误,此时缓冲区中什么也没留下. 3.fgets() 从文件字节流中获取指定长度的字符串并

窗口迅速关闭的解决办法/scanf/if/for/break

break if的格式 if(a>b) { printf("max=%d\n",a); } else printf("max=%d\n",b); scanf("%s", str2); 窗口迅速关闭的解决办法 刚接触 Visual Studio的时候大多数人会写个Hello World的程序试一下,有的人会发现执行结束后输出窗口会一闪而过,并没有出现Press any key to continue的字样.无论是在Visual Studio

c语言scanf详解

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式.其调用格式为:      scanf("<格式化字符串>",<地址表>);scanf()函数返回成功赋值的数据项数,出错时则返回EOF.其控制串由三类字符构成:1.格式化说明符: 2.

eclipse 中 scanf 先于printf 出现的问题

原文:http://blog.csdn.net/linux_wgl/article/details/7430561 在写一个C语言时,运行时发现scanf比printf先执行了,在网上找了一下资料,原来是输出缓冲区的问题.解决方法有两个,第一,设置缓冲区为空,即没有缓冲区:第二,每执行printf之后,强制缓冲区.具体方法如下: 在printf之前添加:setvbuf(stdout,NULL,_IONBF,0);设置缓冲区为空. 在每句printf之后添加:fflush(stdout); 测试代

神奇的scanf

神奇的scanf 作为标准输入输出函数组中的一个重要的输入的函数,scanf/sscanf/vscanf函数和printf/sprintf/vsprintf有个重要的区别:如果格式参数和后面的参数不匹配,printf系列函数可能会导致打印出的格式或者数据不是自己期望的 ,而scanf系列函数如果格式参数和后面的参数不匹配,可能导致有待输入的参数附近的内存发生变化,甚至导致程序崩溃. 以下面的函数为例: 8 #include<stdio.h> 9 #include<string.h>

C语言杂谈(一)scanf()、scanf_s()与错误 C4996

错误 C4996 初学C语言时,第一个接触到的I/O函数便是scanf()了.但在高版本的 Visual Studio (包括但不限于2015.2013.2012)编译代码时,却会出现意想不到的错误.有如下一段简单的代码: #include "stdio.h" int main(void) { int i; printf("Input i\n"); scanf("%d", &i); printf("i is %d",

scanf函数

变量的内存:字节和地址:1.变量的存储单位是字节,每个字节都有存储地址.2.不同的数据大小占用的内存带下不同拥有的字节数也是不同的.变量的存储:1.存储是按照,先存储的放在地址教高的位置,优先存储的地址越大,存储地址用十六进制表示.2.&是取址运算符,用来获取地址.%p这个占位符用来输出地址.3.由于c语言弱语言性质,导致未初始化的变量不会报错,所以要注意变量的初始化.scanf函数说是stadio.h自带函数,用于提醒用户进行输入操作.注意:scanf只能输入变量地址,&变量名Scanf