C/C++ printf&scanf

参考内容及部分图片来源:

https://www.runoob.com/cprogramming/c-function-printf.html


目录

printf()

printf和转义字符 

scanf()

练习


 C本身没有输入输出功能,均是由函数提供的

printf()

输出函数包含于头文件<stdio.h>

printf输出的格式如下:

printf("<格式化字符串>", <参量表>);

下面是函数的声明

int printf(const char *format, ...)

format -- 这是字符串,包含了要被写入到标准输出 stdout 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。

format的输出格式如下:%[flags][width][.precision][length]specifier

常用的format如下:

specifier如下:

flags如下:

width如下:

.precision如下: 

length如下:

实际案例:

   char ch = 'A';
   char str[20] = "www.runoob.com";
   float flt = 10.234;
   int no = 150;
   double dbl = 20.123456;
   printf("字符为 %c \n", ch);
   printf("字符串为 %s \n" , str);
   printf("浮点数为 %f \n", flt);
   printf("整数为 %d\n" , no);
   printf("双精度值为 %lf \n", dbl);
   printf("八进制值为 %o \n", no);
   printf("十六进制值为 %x \n", no);

 输出结果:

printf和转义字符 

printf输出需要注意,并不是全部输出,转义字符是会转化为本来的样子,具体情况如下:


【解释】首先要明确该字符串中包含的转义字符,”a \b re \’ hi \' y \\ \b ou \n”中的转义字符(带下划线的部分)共有6个,其中’\b’是退格符,输出时将光标往左边回退一个位置,题目中的‘a’,‘\\’将会被覆盖。

‘\’’为单引号字符,’\\’为\字符,’\n’为回车换行符。所以显示的结果为C。

 (来源:链接:https://www.nowcoder.com/questionTerminal/866c750a16864101abeea9f6e4270072
来源:牛客网)

常见的转移字符如下:

但是要注意,符号!和符号%比较特殊,!没有转义字符,%的转移字符是%%

题目:

正确答案是: 

printf("\"My salary was increased by 15%%!\"\n");

scanf()

输出函数包含于头文件<stdio.h>

scanf输出的格式如下:

printf("<格式化字符串>", <参量表>);

下面是函数的声明

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

 

 format的输出格式如下:[=%[*][width][modifiers]type=]

具体实例:

scanf因为格式的原因,对输入的要求也不一样

#include<stdio.h>
int main(void) 
{ 
    int a,b,c; 
 
    printf("请输入三个数字:");
    scanf("%d%d%d",&a,&b,&c); 
    printf("%d,%d,%d\n",a,b,c);
    return 0; 
}

交互如下: 

  • 1、&a、&b、&c 中的 & 是地址运算符,分别获得这三个变量的内存地址。
  • 2、%d%d%d 是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab 键、回车键分隔。

以上内容是可以在输入中加入空格,tab键和回车分割,但是下面的情况就不允许进行这样的操作

#include<stdio.h>
int main(void)
{
    int a,b,c;
 
    printf("请输入三个数字:");
    scanf("%d, %d, %d",&a,&b,&c);
    printf("%d, %d, %d\n",a,b,c);
    return 0;
}

如果格式控制字符串中有非格式字符,则输入时也需要输入相应的非格式字符

输入1,2,3

 

区别在于,%d之间有了逗号,那么交互输入的时候,必须严格输入

输入时 , 前一定要紧跟在数字后面,数字与 , 之间不能有空格。

练习

题目1:

10A20B↙

解释】scanf用于输入整数时,当遇到非数字字符结束,此时非数字字符将存入键盘

缓冲区,如果接着读入字符,将从键盘缓冲区中读取该字符。对于C的输入,10后面是字

符’A',则将10给a1,'A’就赋给c1,20赋给a2,’B’赋给c2.所以正确的输入方法是C.

(牛客网@1185925亓乂

因为是整形和字符类型的整合输入,所有如果加空格的话,会把空格赋给c1和c2

 

答案:A

scanf函数的标准输入格式为:scanf(格式控制字符串,地址列表);

其中格式控制字符串的一般形式为 %[*][数据宽度][长度]类型。

1.类型 :%o (八进制)、%d(十进制)、%x(十六进制)、%f (字符型)、%u(无符号类型)、%c (字符型)、%s(字符串型)

2.数据宽度:用十进制整数来指定字符宽度 例如

int a,b;

scanf("%5d",&a);

当输入为1234567时,截取前面5位赋给a,则有a=12345

scanf("%4d%4d",&a,&b);

当输入为12345678时,此时截取前4位给a,后4位给b,则有a=1234,b=5678

3.长度:长度格式符为l或h,其中l表示长整型数据例如%ld、双精度浮点数%lf,h表示的是短整型数据

当输入多个数值型数据时,如果格式控制字符串中没有非格式字符(逗号、空格等 ) 出现 ,例如scanf("%d%d",&a,&b);此时在输入数据时可以用空格、TAB或回车来表示输入数据之间的间隔,比如输入 1_2(回车) (这里下划线表示的是空格),则a=1,b=2

4.如果格式控制字符串中有非格式字符,则输入时也需要输入相应的非格式字符

(正如本题所示的输入中含有非格式字符 a=, b= 因此在输入的时候也应该输入a=, b=)

例如

int a,b;

scanf("%d,%d",&a,&b);含有非格式字符逗号,在输入数据的时候就应该输入1,2  此时有a=1,b=2

5. %*,表示的是在输入数据时将会跳过这个数值

例如

int a,b;

scanf("%d,%*d,%d",&a,&b);输入1,2,3 时,2将被跳过赋值,有a=1,b=3

(链接:https://www.nowcoder.com/questionTerminal/037f56bb366a48ad873bb13a71ecf50d
来源:牛客网)

题目2:

格式控制字符串中出现的常规字符(包括转义字符),务必原样输入。

答案是C

题目3:

答案B


在scanf中,格式控制符与printf函数中的使用方式相同,如%d、%o、%x、%c、%s、%f等等。

但是在输入时所有的非格式控制符”都要原样输入。所以在本题中输入的时候b=,f=:以及逗号都必须要原样输入。仅有选项B符合要求。

(链接:https://www.nowcoder.com/questionTerminal/248afe36931f48ecb08be6324bbee9aa
来源:牛客网)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值