c语言笔记4

2024.7.26

printf函数

研究一个函数: 1、百度 2、查看linux中文C手册 3、man手册(英文)

头文件 #include

格式:printf(“格式控制”,输出表列);

函数原型 int printf(const char * format, ...); 变参 函数

函数作用 将指定格式的数据 输出 到 屏幕终端上(输出设备)

函数参数

format----》指定格式

...---->参数不固定

指定格式---》也就是将数据 以什么样的方式 打印到屏幕上

%s 字符串格式

%d 整型 int

%c 字符型 char

%hd 短整型 short int

%hhd 字符型的ascii码 char 数据对应的ascii码 的值

%f 单精度浮点型(实型) float

%lf 双精度浮点型 double

%ld long int

%lld long long int

%x 十六进制

%#x 十六进制 并且 十六进制 的前缀 0x也会打印出来 #o 八进制 %#o 八进制 并且 八进制的前 缀0打印出来

%e 以科学计数法的方式将浮点数打印出来

%p 打印内存的地址  

int a = 100; printf("a:%d\n",a);

字段宽度

字段宽度其实就是指输出的字符所占的终端的列数,用户可以指定宽度,比如用户指定宽度为10, 但是实际要输出的字符只有4个,那剩余的列数为6列,则这6列用空格补齐。注意:如果用户没有明 确指定左对齐,则默认采用右对齐输出。如下:

int a=10,b=30;

float f = 3.141566;

printf("a:%#x\n",a);

printf("b:%10#x\n", x); //结果为 0x14

printf("f=%f\n", f); //结果为3.141566

printf("f=%.2f\n", f); //结果为3.14 //输出多个数据

printf("a:%d, b:%d\n", a, b);

printf("a:%d, b:%d, f:%f\n", a, b, f);

scanf函数

格式:scanf(“格式控制”,地址表列);

头文件 #include

函数原型 int scanf(const char * format, ...);

函数作用 从屏幕终端上获取指定格式的数据,存储到变量的内存空间上

函数参数 format----》指定格式

函数返回值 成功 返回 获取 到的变量的个数 2 失败 0

int a1=0,a2=0;

 //scanf("%d:%d",&a1,&a2);

 //输入的时候也必须按照这种格式输入,比如12:30

 scanf("%d%d",&a1,&a2);

printf("a1:%d a2:%d\n",a1,a2); //此时输入缓冲区中还存在换行符,而%c 不会自动跳过换行符或者空格,所以获取到的字符就是换行符

char ch; scanf("%c",&ch);

 printf("%hhd %c\n",ch,ch);

 //ch == '\n' 10

 //%d会自动默认跳过换行符

int val=0;

scanf("%d",&val);

printf("%d\n",val);

说明:

1.scanf函数中的“格式控制”后面应当是变量的地址,由取地址运算符和变量名共同组成,不能仅是变量名:scanf("%f%d", &a,&b);

2.如果“格式控制”中除了格式说明以外还有其它字符,则在输入数据时必须在对应位置输入与之相同的字符:scanf("%d,%d", &a,&b);

3.用%c格式输入字符时,空格和转义字符都作为有效字符输入,应注意:scanf("%c%c%c", &a,&b,&c);

4.在输入数值型数据时,遇到空格、回车、Tab键或遇非法输入,则认为该数据结束

5.对于unsigned型变量所需的数据,可以用%u或%d格式输入

输出控制

整型格式说明符号

十进制

%d 或 %md     用于基本整型   int

%ld 或 %mld   用于长整型   long

%u 或 %mu     用于无符号基本整型   unsigned

%lu 或 %mlu   用于无符号长整型   unsigned long

八进制

%o 或 %mo       用于基本整型   int

%lo 或 %mlo     用于长整型   long

十六进制

%x 或 %mx       用于基本整型   int

%lx 或 %mlx      用于长整型   long

m表示输出的整型数据所占列数,其中,实际位数大于m,以数据实践位数输出。实际位数小于m,数据前用空格补满位数。

一个int型整数也可以%u格式输出,反之一个unsigned型整数也可以%d、%o、%x格式输出。按相互赋值的规则处理

字符型格式说明符

字符char型

%mc 输出的字符占m列,如:printf(“%3c”,’a’);

实际输出为:空格空格a

字符串

%ms  输出的字符串占m列。若串长>m,全部输出;若串长<m,左面补空格。

%-ms  输出的字符串长<m,右面补空格

%-m.ns  只取字符串前n个字符。若n<m,右面补空格;若n>m,m自动取n值。

Eg

# include <stdio.h>

void main ( )                

{

  printf("%3s,%7.2s ,%-5.3s,%.4s\n","CHINA","CHINA", "CHINA", "CHINA");

}

CHINA,     CH, CHI  , CHIN

实型格式说明符

十进制数形式 %m.nf 或 %-m.nf

指数形式 %m.ne 或 %-m.ne

%g或%G形式 根据数值的大小,自动选%f 或 %e中宽度较短的一种格式,不输出无意义的0。

在输出实型数据时,格式说明符中的m表示整个数据所占的宽度,n表示小数点后面所占的位数。

如果在小数点后取n位后,所规定的数据宽度m不够输出数据前面的整数部分(包括小数点),则按实际的位数进行输出。

Eg

# include <stdio.h>

void main ( )                

{

  float f=123.456;

  printf("%fV%10.2fVV%.2fVV%-10.2f\n",f,f,f,f,f);

}

123.456001VVVVV123.46VV123.46VV123.46VVVV

Eg

#include "stdio.h"

main()

{ double  x=34.567

  printf("x=%f\n",x);double类型小数点后默认有6位

  printf("x=%d\n",x);%d整形格式说明符,而输出双精度,不匹配

  printf("x=%d\n",(int)x);强制类型转换,以整形输出,舍弃小数部分

}

这个程序的实际运行结果为

x=34.567000

x=27263

x=34

输入数据格式控制

整型格式说明符

十进制形式

%d 或 %md    用于一般整型

%ld 或 %mld     用于长整型

%u 或 %mu       用于无符号基本整型

%lu 或 %mlu     用于无符号长整型

八进制形式

%o 或 %mo       用于一般整型

%lo 或 %mlo    用于长整型

十六进制形式

%x 或 %mx      用于一般整型

%lx 或 %mlx     用于长整型

m表示输入数据时的列数

与输出情形一样,对于八进制形式与十六进制形式的输入格式,主要用于输入无符号整型的数据

实型格式说明符

单精度实型 %f 或 %e

双精度实型 %lf

可以指定输入数据所占的列数,系统自动按它截取所需数据,如:scanf(“%3d%3d”,&a,&b); 当输入1234567时,a得到123,b得到456,多余的7无用;

若在%号后有一个“*”和一个数字,表示跳过它指定的列数,如:scanf(“%2d%*3d%3d”,&a,&b);当输入12345678时,a得到12, %*3d表示读入345这3个数但不赋给变量, b得到678。

当用于输入整型数据的格式说明符中没有宽度说明时,则在具体输入数据时分为以下两种情况:

1.如果各格式说明符之间没有其它字符,则在输入数据时,两个数据 之间用"空格"、或"Tab"、或"回车"来分隔。

2.如果各格式说明符之间包含其它字符,则在输入数据时,应输入与 这些字符相同的字符作为间隔。

在用于输入的实型格式说明符中不能用m.n来指定输入的宽度和小数点后的位数(这是与输出的不同之处)。

例如:    scanf(“%7.2f”,&a);× 此用法是错误的

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值