字符输出函数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-06-18 人工智能(AI)正以前所未有的力量重塑世界,它将如何深刻改变我们的生活和社会?6月18日,在2025上海世界移动通信大会(MWC上海2025)开幕式上,中国移动董事长杨杰以《“AI+”引领智能涌现,开启碳硅融合新未来》为题发表主旨演讲,围绕“人工智能+”主题,描绘了一幅AI深度融入人类文明、人机协同
日期:2025-06-18 为县域电力供应与防洪安全奠定坚实基础,安图县水电管理中心通过隐患排查、物资保障、智能运维三重防线,全面做好防汛备战工作。隐患排查到位,夯实安全基础。成立专项检查组,对县域内20座电站开展全覆盖式汛前安全检查,重点对大坝渗漏、泄洪通道堵塞等6类风险隐患,建立“一患一档”整改机制。通过实地勘察与仪器检测
日期:2025-06-18 NARDI燃气灶24小时售后服务电话:400-883-2086NARDI燃气灶全国统一客服维修热线:400-883-2086我们是NARDI燃气灶维修行业的专业团队,提供优质的NARDI燃气灶维修服务。我们了解NARDI燃气灶在家庭生活中的重要性,因此,我们承诺提供高效、快速、专业的维修
日期:2025-06-18 睿尚集成灶的全国售后服务电话是400-883-2086。拨打此电话,您可以预约售后服务,之后售后服务网点会根据您所在的地区进行就近安排,并与您联系,以安排上门维修。虽然不同地区的具体售后电话号码可能不同,但售后服务流程是一致的。如何进行睿尚集成灶的售后维修?1. 您可以拨打睿尚集成灶的全
日期:2025-06-18 【来源:福建消防】九载寒窗磨利剑一枝妙笔写芳华2025年福建省中考将于6月19日—21日举行中考期间福建天气情况如何?据福建气象消息在副热带高压控制下未来我省天气转为晴热+午后热雷雨为主6月18日,福建全省多云部分有阵雨或雷阵雨,局部大雨6月19日-21日,全省多云部分有阵雨或雷阵雨气温方面今天起我