字符输出函数putchar
putchar函数是字符输出函数,其功能是在终端(显示器)输出单个字符。其函数原型为:
int putchar(int ch);
ch表示要输出的字符内容,返回值作用为:如果输出成功返回一个字符的ASC码,失败则返回EOF即-1
#include<stdio.h>
int main()
{
char x = 'B';
putchar('A');
putchar(x);
putchar('\n');
putchar('\C');
return 0;
}
字符输入函数getchar
getchar函数的功能是接收用户从键盘上输入的一个字符。其一般调用形式为:
getchar();
getchar会以返回值的形式返回接收到的字符.
#include<stdio.h>
int main()
{
char c;
c = getchar();
printf("%c", c);//将读取的字符赋值给字符变量c
return 0;
}
格式化输入函数scanf
scanf函数称为格式输入函数,即按照格式字符串的格式,从键盘上把数据输入到指定的变量之中。Scanf函数的调用的一般形式为:
scanf(“格式控制字符串”,输入项地址列表);
其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表项中的地址给出各变量的地址,地址是由地址运算符”&”后跟变量名组成的。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
float a;
scanf("%f", &a);
printf("%f", a);
return 0;
}
输入long类型数据时必须使用%ld,输入double数据必须使用%lf或%le。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
long a;
scanf("%ld", &a);
printf("%ld", a);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
double x;
scanf("%lf", &x);
printf("%lf", x);
}
附加格式说明符”*”使对应的输入数据不赋给相应的变量。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a;
printf("请输入数字:\n");
scanf("%*d %*d %d", &a);
printf("%d", a);//999
return 0;
}
格式化输出函数printf
printf函数叫做格式输出函数,其功能是按照用户指定的格式,把指定的数据输出到屏幕上.printf函数的格式为:
printf(“格式控制字符串”,输出表项);
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a = 12;
float b = 3.14156;
char c = 'A';
printf("%d\n", a);
printf("o%o\n", a);//八进制
printf("0x%X\n", a);//十六进制
printf("%3.4f\n", b);//小数点后4位
printf("%c\n", c);
return 0;
}
%d按整型数据的实际长度输出。
%[0]md以m指定的字段宽度输出,如果数据的位数小于m,则左端补以空格;若m前面有"0”,则左端补以0。
%md以m指定的字段宽度输出,左对齐。
%ld输出长整型数据
#include<stdio.h>
int main()
{
int x = 123456;
printf("%d\n", x);
printf("%10d\n", x);//一共10个宽度
printf("%3d\n", x);//因为数字长度大于3,所以没有影响
printf("%010d\n", x);//一共10个宽度,因为第一位是0,所以左边补0
printf("%-10d", x);
printf("aaa");
printf("%ld", x);//32位系统,D,LD是一样在,有些系统,D是短整形
return 0;
}
%d : 以十进制形式输出数据
%o : 以八进制形式输出数据
%x : 以十六进制形式输出数据
%u : 以十进制形式输出unsigned型数据
#include<stdio.h>
int main()
{
int x = -1;
printf("%p", &x);
printf("%d,%u,%o,%x", x,x,x,x);
return 0;
}
short
int main()
{
short sh1, sh2;//默认是signed ,有符号
sh1 = 19;
sh2 = -19;
unsigned short ush1;
ush1 = 256;
//有符号,无符号都是占2个字节
printf("%d,%d\n", sizeof(signed short), sizeof(unsigned short));//2,2,
printf("%hd\n", sh1);//%hd 对应有符号
printf("%hd\n", sh2);
printf("%hu\n", ush1);//%hu 对应无符号
}
#include<stdio.h>
#include<limits.h>
int main()
{
//有符号Short最大,最小
//第一位是符号位,0为正,1为负
printf("%hd,%hd\n", SHRT_MAX, SHRT_MIN);
//无符号Short最大,最小
//16位全是数据
printf("%d,%d\n", USHRT_MAX, 0);//%hu也是可以
}
%hd只能解析SHRT_MAX与SHRT_MIN中的值,越界会出错,%hu同理
#include<stdio.h>
#include<limits.h>
int main()
{
printf("%hd,%hd\n", SHRT_MAX+1, SHRT_MIN-1);
printf("%hu,%hu\n", USHRT_MAX+1, 0-1);
}
C语言中规则short<int<long
int
#include<stdio.h>
#include<limits.h>
int main()
{
//4个字节,有一个符号位,0为正,1为负
printf("max=%d,min=%d\n", INT_MAX, INT_MIN);
//无符号
printf("max=%u,min=%d\n", UINT_MAX, 0);
//max=-2147483648,min=2147483647
printf("max=%d,min=%d\n", INT_MAX+1, INT_MIN-1);
}
long
#include<stdio.h>
#include<limits.h>
int main()
{
//4个字节,有一个符号位,0为正,1为负
printf("max=%d,min=%d\n", LONG_MAX, LONG_MIN);
//无符号
printf("max=%u,min=%d\n", ULONG_MAX, 0);
//max=-2147483648,min=2147483647
printf("max=%d,min=%d\n", LONG_MAX +1, LONG_MIN -1);
}
#include<stdio.h>
#include<limits.h>
int main()
{
//4个字节,有一个符号位,0为正,1为负
printf("max=%d,min=%d\n", LONG_MAX, LONG_MIN);
//无符号
printf("max=%u,min=%d\n", ULONG_MAX, 0);
//max=-2147483648,min=2147483647
printf("max=%d,min=%d\n", LONG_MAX +1, LONG_MIN -1);
}
16位系统:long是4字节,int是2字节
32位系统:long是4字节,int是4字节
64位系统:long是4字节,int是4字节
long long
#include<stdio.h>
#include<limits.h>
int main()
{
printf("LLSize=%d\n", sizeof(long long));
//8个字节,有一个符号位,0为正,1为负
//max=9223372036854775807,min=-9223372036854775808
printf("max=%lld,min=%lld\n", LLONG_MAX, LLONG_MIN);
//无符号
printf("max=%llu,min=%d\n",ULLONG_MAX,0);
//max=-9223372036854775808,min=9223372036854775807
printf("max=%lld,min=%lld\n", LLONG_MAX +1, LLONG_MIN -1);
}
编译long long需要支持C99标准的编译器才行
long long 的级别高于 long ,long 的级别高于 int ,int 的级别高于 short ,short 的级别高于 char 。
输出一个字符,输出数据可以是单个字符或是一个范围在0到255之间的整数
#include<stdio.h>
#include<limits.h>
int main()
{
char x = 'a';
int i = 97;
//以下都是输出a,97
printf("%c,%d\n", x, x);
printf("%c,%d", i, i);
}
输出hello
int main()
{
printf("%c%c%c%c%c\n", 'h', 'e', 'l', 'l', 'o');
printf("%c%c%c%c%c", 104, 101, 108, 108, 111);
}
限定宽度
#include<stdio.h>
#include<limits.h>
int main()
{
printf("%3c%3c%3c%3c%3c", 'h', 'e', 'l', 'l', 'o');
}
int main()
{
printf("%s\n", "hello world");
printf("%s %s", "hello", "world");
}
%s多种宽度
int main()
{
// hello world
printf("%30s\n", "hello world");
//如果给的宽度10小于实际输出字符串宽,直接按实际输出
printf("%10s\n", "hello world");
printf("%-50s\n", "hello world");//左对齐
//输出字符串前n个字符,右对齐,总长度15
printf("%15.5s\n", "hello world");// hello
char str[] = "hello world";
printf("\n%s", str);
}
%f 整数部分全部输出,小数部分输出6位
%m.nf 输出数据共点m列,小数占n位,右对齐
%-m.nf 输出数据共m列,小数占n位,左对齐
#include<stdio.h>
#include<limits.h>
int main()
{
float f1;
f1 = 1.2345f;
float f2 = 100;
printf("%f,%f\n", f1,f2);//保留小数点后6位
printf("%15f,%2f\n", f1, f2);//如果小于限定宽度,按实际,否则补空格
printf("%-15f,%2f\n", f1, f2);//-右边补空格
printf("%-15.2f,%2.1f\n", f1, f2);//-右边补空格,小数点后2位
printf("%015f\n", f1);//左补0
}
%e格式符
输出数据共13位,其中整数部分为1非零数字,小数点占1位,小数部分为6位,指数部分e占1位,指数符号占1位,指数为3位,若输出数据为负数,还应增加一位整数部份的符号位。
int main()
{
printf("%e", 12.3);
//1.230000e+01
}
#include<stdio.h>
#include<limits.h>
int main()
{
printf("%15e\n", 12.3456);//限定宽度,补空格
//1.230000e+01
double d1 = 10000.1234;
printf("%.10e\n", d1);//1.0000123400e+04,小数点后10位
printf("%20e%", d1);//限定20宽度,小于时左边补空格
}
%g格式符
根据数值大小,自动选择f格式或e格式输出实数。
%g用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的0。即%g是根据结果自动选择科学记数法还是一般的小数记数法,在指数小于-4或者大于等于精度时使用%E格式
#include<stdio.h>
#include<limits.h>
int main()
{
float f1 = 1.234;
//1.234567,1.234567e+00,1.23457
printf("%f,%e,%g\n", f1, f1, f1);
printf("%g\n", 0.00001234);
printf("%g\n", 0.0001234);
printf("%.2g\n", 123.45);
printf("%.2g\n", 23.45);
double d1 = 10.0;
printf("%g", d1);
}
%d带符号的十进制形式输出整数
printf("%d,%D", 20, 20);//20,D
%o无符号八进制输出整数
printf("%o,%O", 10, 10);//12,O
%x 无符号十六进制输出整数
printf("%x,%X", 14, 14);//e,E
u%以十进制形式输出无符号整数
printf("%u,%U", 14, 14);//14,U
%c以字符输出
printf("%c,%C", 'D', 'D');//D, D
%s 输出字符串
printf("%s,%S", "Hello","Hello");//Hello,
%f 以小数点输出
printf("%f,%F", 1.0,2.0);//1.000000,2.000000
这个在VS的C编译器下可以正常输出,在gcc下结果不同
%e 指数输出
printf("%e,%E", 1.0,1.0);//1.000000e+00,1.000000E+00
%g 使用输出宽度较小的格式输出
printf("%g,%G", 1.0, 2.0);//1,2
printf格式一定要匹配
int main()
{
int x = 1;
printf("%d,%f", x,x);//f%输出在0.000000,输出格式一定要匹配
getchar();
}
从左向右开始解析
int main()
{
int x = 11;
printf("%%d", x);//从左向右开始解析,%%解析成%了。
getchar();
}
*与格式符
int main()
{
int x = 10;
//数字是限定字符宽度
printf("%d\n", x);
printf("%4d\n", x);
printf("%8d\n", x);
printf("%16d\n", x);
}
int main()
{
for (int i = 1; i < 10; i++)
{
printf("%*d\n", i, i);//*不是替换i的
}
}
int main()
{
for (int i = 1; i < 10; i++)
{
printf("%*.*f\n", 2 * i, i, 1.23);//2*i表示宽度,i是小数点位数
}
}
%d中间加空格
int main()
{
printf("%d,%d", 99, -99);
printf("\n");
printf("% d,% d", 99, -99);//正数多一个空格,负数没有变化
}
int main() {
printf("%o,%#o\n", 8, 8);//#在八进制时自动补0
printf("%x,%#x\n", 20, 20);//补0x
printf("%x,%#X", 20, 20);//补0X
return 0;
}
int main() {
printf("%.0f,%f\n", 1.23, 1.23);
//补了#号后,小数点会保留
printf("%#.0f,%f\n", 1.23, 1.23);//这里输出会1.,1.230000
printf("%#.0e,%e\n", 1.23, 1.23);//1.e+00,1.230000e+00
printf("%#.0g,%g\n", 1.23, 1.23);//1.,1.23
return 0;
}
%a是以指数形式输出一个浮点数
1.%a浮点数,十六进制数字和p-记数法(C99)%A浮点数,十六进制数字和p-记法(C99)。
int main() {
//0x1p+4,0x1.4e3d70a3d70a4p+4,1p+4->2的4次方
printf("%.0a,%a\n", 20.89, 20.89);
printf("%.0a,%a\n", 1.23, 1.23);
printf("%.0a,%a\n", 4.23, 4.23);
return 0;
}
printf类型匹配
int main() {
int age = 9;
float weight = 69.9;
//今年9岁,体重69.900002公斤!
printf("今年%d岁,体重%f公斤!\n",age, weight);
//如果写反,今年-1610612736岁,体重0.000000公斤!
printf("今年%d岁,体重%f公斤!\n", weight, age);
//这里可以确定提是%d是按整数截取解析,%f按小数
printf("%p,%p", &age, &weight);//这里在内存中查看显示结果不同
getchar();
}
int main() {
printf("%d,%f", 10.1, 10.8);//在x64下,第一个匹配出错,第二个正确,x86下只要一个匹配出错,都出错
}
注意:x86与x64下有区别
int main() {
printf("%d\n", INT_MAX);
printf("%d\n", INT_MAX+1);
return 0;
}
这个是越界出不正确值
输出+数,在% 后输入一个+号
int main() {
printf("%d,%d\n", 10, -20);
printf("%+d,%+d\n", 10, -20);
return 0;
}
int main() {
printf("%.2f,%.2f\n", 1.23, -20.45);
//+1.23,-20.45
printf("%+.2f,%+.2f\n", 1.23, -20.45);
return 0;
}
日期:2025-09-11 金狗保险柜,全国统一售后维修客服服务热线:400-883-2086。作为专业的保险柜制造商,金狗保险柜始终致力于为客户提供安全、可靠、耐用的保险柜解决方案。我们的保险柜采用先进的安全技术和优质材料,确保在各种使用场景下都能提供最佳的保护。无论是家庭收藏品还是企业重要物资,金狗保险柜都能满足您的需求。
日期:2025-09-11 华柯楼保险柜:守护您的财富与隐私 华柯楼保险柜售后服务电话:400-883-2086,致力于为客户提供高端的保险解决方案,以其卓越的防弹性能、耐用性及创新设计而闻名。作为一家全国知名的保险柜品牌,华柯楼保险柜始终将客户的安全与隐私放在首位。我们的产品不仅在安全性上达到国际领先水平,还提供24小时
日期:2025-09-11 双壹保险柜,全国统一售后维修客服服务热线:400-883-2086。作为专业的保险柜制造商,双壹保险柜始终致力于为客户提供安全、可靠、耐用的保险柜解决方案。我们的保险柜采用先进的安全技术和优质材料,确保在各种使用场景下都能提供最佳的保护。无论是家庭收藏品还是企业重要物资,双壹保险柜都能满足您的需求。
日期:2025-09-11 品帅保险柜:为您打造安全可靠的 storage solution品帅保险柜作为专业的保险柜品牌,始终致力于为用户提供安全、可靠、专业的一站式 storage解决方案。作为一家全国知名的企业,品帅保险柜自成立以来,始终以客户需求为驱动,不断推动保险柜技术的创新与升级,为不同行业和客户提供定制化服务。
日期:2025-09-11 浙安保险柜:为您安全储存,安心相随浙安保险柜,作为您贵重物品的最佳选择,始终以卓越的安全性能和贴心的服务,为您守护每一件值得珍藏的物品。作为全国知名的保险柜品牌,浙安保险柜以其创新的设计和优质 materials,为千家万户提供专业的保险解决方案。无论是家庭珍藏品、办公室贵重文件,还是您的私人