scanf 函数笔记

函数声明

int scanf(const char *format, ...);

说明

<返回值> scanf ("<格式化字符串>", <参数表>);

返回值

scanf 返回成功读入的变量个数,读到文件末尾或发生错误返回EOF。

int n, m;
scanf("%d%d", &n, &m);
scanf("%d%d", &n, &m);

输入

3 4
3
^Z
/*Windows系统终端下以^Z即Ctr+Z代表EOF*/

返回值为 分别为 2 和 1

又如

int n;
scanf("%d", &n);

输入

^Z

返回值为 -1 ( -1 即 EOF 的值, 使用 printf 即可看到)

格式化字符串

格式

%[width][modifiers]

说明

每个%分别对应控制参数表中每个变量的输入格式(%%除外, * 亦对应一个变量);
除%引导的部分外,可加入任意输入格式有关的字符;
width指定了在当前读取操作中读取的最大字符数,可省略;

modifiers 参数类型 含义
d char型,int型 读入一个十进制整数
o int型,unsigned int型 读入一个八进制整数
x,X int型,unsigned int型 读入一个十六进制整数
u unsigned int型 读入一个十进制整数
lld long long型 读入一个十进制整数
llu unsigned long long型 读入一个十进制整数
c char型,int型 读入单个字符,若 width 不为 1 ,则读取 width 个字符并存储在数组中连续位置。但末尾不会追加空字符。
s char *型 读入一个字符串,读到空白符结束,末尾追加 '\0'
f float型 读入一个十进制实数
lf double型 读入一个十进制实数
e,E float型,double型 用指数形式读入一个十进制实数
g,G float型,double型 读入一个十进制小数
p void *型 读入一个指针
[ ] / 扫描字符集合
% 不转换参数 读入一个%

参数表

参数表中形参的数量和类型与格式化字符串相适应,否则读入可能发生异常
每个形参用逗号( , )隔开

示例

#include<stdio.h>
int main()
{
    double a, b;
    int d, e;
    char ch, c[100];
    
    scanf("%d%d", &d, &e);		/*两个数字之间应当用空白符分开*/
    scanf("(%d,%d)", &d, &e);
    scanf("(%d,%d)", &d, &e);
    scanf("(%d,%d)", &d, &e);
    scanf("%2d%d", &d, &e);
    
    scanf("%lf%lf", &a, &b);
    scanf("%4lf%lf", &a, &b);	/*注意小数点占一个字符*/
    
    scanf("%c", &ch);
    scanf("Hello World%s", c);
    scanf("%11c", c);
    
    return 0;
}

输入示例

3 3						/*变量中值分别为 3 和 3*/
(3,3)					/*变量中值分别为 3 和 3*/
( 3 , 3 )				/*多空格可以正常读入,为 3 和 3,但不规范*/
(3,,3)					/*多逗号读入出错,第一个变量为 3 而第二个则无法成功读入*/
2019					/*变量中值分别为 20 和 19*/

3.14 3.14				/*变量中值分别为 3.14 和 3.14*/
3.143.14				/*变量中值分别为 3.14 和 3.14*/

a						/*变量中值为 'a' (实际储存为字符'a'的Ascii码)*/
Hello WorldHelloWorld	/*变量中值为 HelloWorld\0 (以'\0'作为串结束符)*/
Hello World				/*变量中值为 Hello World (没有串结束符,不能直接printf)*/

by sdust weilinfox
转载请注明原文地址:https://www.cnblogs.com/weilinfox/p/12238612.html

posted @ 2020-01-28 18:55  桜風の狐  阅读(185)  评论(0编辑  收藏  举报