看?C语言基础——printf和scanf入门

目录

前言:

printf:

1.基本用法:

2.占位符:

占位符列举:

3.输出要求:

限定宽度:

限定小数位数:

输出部分字符串:

scanf

1.基本用法:

2.scanf返回值:

3.占位符:

4.赋值忽略符:


 

前言:

人要做成一件事情,最重要的是他的内心深处到底想要什么,在满足普遍意义上的需求背后是各不相同的,每个人都是独一无二的,而每个人又都是普通且平凡的,作为一个普通人,我想把C语言学好,这些过程对于我来说都是必不可少的,屏幕前的你也是,那么就不再废话了,咱直奔主题。

printf:

1.基本用法:

printf()的作用是将参数文本输出到屏幕。它名字里的f表示format(格式化)表示可以定制输出

2.占位符:

“占位符”,即这个位置能用其他的值代入。

//输出 There are 3 apples
#include<stdio.h>
int main()
{
  printf("There are %d apples\n",3);
  return 0;
}

 如上%d就是占位符,表示这儿需要其他值来 

  • 占位符列举:

printf()的占位符有许多种类,与C语言的数据类型相对应。下面列举了一些常用的占位符。

%a:⼗六进制浮点数,字⺟输出为⼩写。

%A:⼗六进制浮点数,字⺟输出为⼤写。

%c:字符。

%d:⼗进制整数。

%e:使⽤科学计数法的浮点数,指数部分的 e 为⼩写。

%E:使⽤科学计数法的浮点数,指数部分的 E 为⼤写。

%i:整数,基本等同于 %d

%f:⼩数(包含 float 类型和 double 类型) 。

%g:6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e

为⼩写。

%G:等同于 %g ,唯⼀的区别是指数部分的 E 为大写。

%hd:⼗进制 short int 类型。

%ho:⼋进制 short int 类型。

%hx: ⼗六进制  short int  类型

%hu::unsigned short int 类型。

%ld:⼗进制 long int 类型。

%lo:⼋进制  long int  类型。

%lu:⼗六进制 long int 类型。

%lld: unsigned long int 类型。

%llo:⼗进制 long long int 类型。

%llx:⼗六进制 long long int 类型。

%llu:unsigned long long int 类型。

%Le:科学计数法表⽰的  long double  类型浮点数。

%Lf:long double 类型浮点数。

%n:已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。

%o:⼋进制整数。

%p:指针。

%s:字符串。

%u:⽆符号整数(unsigned int)。

%x:⼗六进制整数

%zd:size_t  类型。

%%: 输出⼀个百分号。

3.输出要求:

  • 限定宽度:

printf()允许限定占位符的最小宽度。

#include<stdio.h>
int main()
{
  printf("%5d\n",123);//输出为"123  "
  return 0;
}

 注意:上面的输出结果123的后面有空格。

对于小数,这个限定符会限制所有数的最小显示宽度。

//输出123.450000
#include<stdio.h>
int main()
{
  printf("%12f\n",123.45);
  return 0;
}

 

上面的实例中,%12f表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以123.45的输出结果会的头部会添加2个空格。 

  • 限定小数位数:

输出小数时,有时希望限定小数的位数。

//咱要保留小数点后两位
#include<stdio.h>
int main()
{
  printf("Number is %.2f\n",0.5);
  return 0;
}

输出结果:0.50;如果希望为小数点后3位(0.500)则改为%.3f即可。

注意:这种写法可以结合限定宽度占位符,结合使用。

//咱输出一个"  0.50"
#include <stdio.h>
int main()
{
  printf("%6.2f\n",0.5);
  return 0;
}

如上:%6.2表示输出字符串的宽度为6,小数位数为2.所以,输出字符的头部有两个空格。 

  • 输出部分字符串:

%s 占位符用来输出字符串,默认是全部输出。如果只是想输出开头的部分,可以用 %.[m]s 指定输出的长度 [m] 代表一个数字,表示所要输出的长度。

//咱输出个hello
#include<stdio.h>
int main()
{
  pritf("%.5s\n","hello world");
  return 0;
}

scanf

1.基本用法:

咱用scanf给变量输入值。例:

  

注意:因为C语言处理的数据都是有类型的,sacnf()必须提前知道咱要输入的数据类型,才能处理数据,以及在变量前一定要加 &(指针变量除外),在刚开始学习时很容易忽略。

多组:

2.scanf返回值:

scanf()的返回值是一个整数,表示读取成功的变量个数。

如果没有读取任何项,或者匹配失败,则返回0。如果在成功前读取任何数据之前,发生了读取错误或者遇到读取文件结尾,则返回常量 EOF

#include<stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  float f = 0.0f;
  int r = scanf("%d %d %f",&a, &b, &f);
  printf("a=%d b=%d f=%f\n",a, b, f);
  return 0;
}

输出结果测试:

3.占位符:

scanf()和printf()的占位符差不多。

  • %c:字符。
  • %d:整数。
  • %ffloat 类型浮点数。
  • %lf:double 类型浮点数。
  • %Lf:long double 类型浮点数。
  • %s:字符串
  • %[ ]:在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9]),遇到不在集合之中的字符,匹配将会停止

上面的占位符中,除了 %c 以外,都会忽略起首的空白字符,%c 不忽略空白字符总是会返回当前第一个字符,无论该字符是否为空格。

%s 其实不完全等于字符串,它的规则是,从当前的第一个非空白字符读起,直到遇到空白字符(即空格,换行符,制表符等)为止。

%s 不会包含空白字符,所以无法用来读取多个单词,除非多个 %s 。这也意味着,scanf()不适合读取可能包含空格的字符串,比如书名或歌曲名。还有,scanf()在遇到 %s 时,会在字符串变量末尾储存一个空字符\0。

scanf()讲字符串读入字符数组时,不会检测字符串是否超过数组长度。所以储存字符串时,很可能会超出数组的边界,导致意料之外的结果。我们通过指定读入字符串的最长长度(即写成 %[m]s )来达到指定读入字符串长度的效果。

#include<stdio.h>
int main()
{
  char name[11];//一个长度为11的数组
  scanf("%10s",name);//最多读取10个数
  return 0;
}

 

4.赋值忽略符:

有时我们输入的值不符合预定额度格式。

#include<stdio.h>
int main()
{
  int year = 0;
  int month = 0;
  int day = 0;
  scanf("%d-%d-%d",&year,&month,&day);//必须按照 年-月-日的格式输入才会被正确的解读
  printf("%d %d %d\n",year,month,day);
  return 0;
}

这个时候,引入scanf()提供的一个赋值忽略符就很妙。只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。

#include<stdio.h>
int main()
{
  int year = 0;
  int mounth = 0;
  int day = 0;
  scanf("%d%*c%d%*c%d",&year,&month,&day);
  return 0;
}

这个 %*c 在占位符的百分号后面加入复制忽略符 *,表示这个占位符没有对于的变量,解读后,不必返回。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值