1、printf
#include<stdio.h>
void main(){
// printf f代表format,按格式输出
printf("%d,%f\n", 1.0,1); //0,0.0000000 格式不匹配输出错误, printf不会进行自动类型转换,
//同样的二进制按照不同方式解析会有不同时的数值
printf("%%d",1); //$d 因为printf从左至右解析 %% 解析成% 然后再输出%d
printf("%*d\n",3,5); //*控制符代表替换第一个数为* 即为printf("%3d",5);
for(int i = 1; i<5;i++){
printf("%*d\n",i,1);
}
printf("%+d,%d\n",10,-10); //+10,-10
printf("% d,% d\n",10,-10); //空格空字符对正数来说,前面会多一个空格, 对负数没有影响,
printf("%#x,%x\n",10,10); //#控制符表示16进制前自动加0x
printf("%#o,%o\n",10,10); //#控制符表示8进制前自动加0
putchar('H'); //输出一个字符,也可以对应的ascci码值
putchar('A'+32); // 小写a
puts("Hi"); //输出字符串后自动换行
}
2、scanf一定要记得取地址符,否则会把变量的值当做内存地址
#include<stdio.h>
void main(){
int n1,n2,n3;
scanf("%d%d%d",&n1,&n2,&n3); //输入多个数据可以用空格键,回车键,tab键隔开输入,最后回车
//如果输入的数据满足了scanf对需要,则输入结束,如果回车后数据不够,则回车只当作一个空白符。
//scanf_s() 安全输入函数
printf("%d",n1);
//单精度输入数据
float f;
scanf("%f",f); //130.0
scanf("%e",f); //1.3e2
scanf("%E",f); //1.3E2
scanf("%g",f); //1.3e2
scanf("%G",f); //1.3E2
//双精度输入数据不能用%f,要用%lf
double d;
scanf("%lf",&f); //130.0
scanf("%le",&f); //1.3e2
scanf("%lE",&f); //1.3E2
scanf("%lg",&f); //1.3e2
scanf("%lG",&f); //1.3E2
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c); //输入也要按照1,2,3的格式输入
scanf(" %d%d%d",&a,&b,&c); //前面有空白符会自动忽略空白符
scanf("%d %d %d",&a,&b,&c); //中间有空白符会自动忽略空白符
scanf("%d%d%d ",&a,&b,&c); //后面有空白符会要求多输入一个数据,即输入四个数据
//使用scanf尽量不要使用非空白符和空白符
//在用%c格式符时,空格字符和转义字符都被当作有效字符输入,如:
char c1,c2,c3;
scanf("%c%c%c",&c1,&c2,&c3);
printf("\n[%c] [%c] [%c]",c1,c2,c3);
//宽度指示时,读入到相应的宽度。如%3d,则只解析3个数字即认为读入这个整数完毕。
int num;
scanf("%3d",&num); //输入123456,只能接收123
char c4 = getchar(); //getchar()会把空格,tab和回车也当成是一个字符,
//如果要获取两个字符就要用三个getchar(),第三个getchar用来接收最后一个回车字符
char c5 = getchar();
char c6 = getchar();
//scanf
char str[30] ={0}; //初始化数组为0
scanf("%[xyz]",str); //值接受xyz的输入,有一个字符不匹配就退出
printf("%s",str);
scanf("%[^xyz]",str); //值接受xyz以外字符的输入,xyz中有一个字符匹配就退出
printf("%s",str);
scanf("%[a-z]",str); //值接受a-z的输入,有一个字符不匹配就退出
printf("%s",str);
int data;
scanf("%d%n",&data,&num); //%n统计输入了多少个字符,把数值赋值给num
printf("%d",num);
//%n统计输入了多少个字符,把数值赋值给num
printf("hello%n,china",num); //num=4
//*空字符会忽略此次输入
scanf("%d%i%d",&x,&y); //输入123,2被忽略,x=1,y=3
//scanf("%5.3f",&num); //指定精度后,scanf就无效了
double db;
//scanf("%f",&db);// %f对double无效
scanf("%lf",&db);//
/*
%d —— 以带符号的十进制形式输出整数
%o —— 以无符号的八进制形式输出整数
%x —— 以无符号的十六进制形式输出整数
%u —— 以无符号的十进制形式输出整数
%c —— 以字符形式输出单个字符
%s —— 输出字符串
%f —— 以小数点形式输出单、双精度实数
%e —— 以标准指数形式输出单、双精度实数
%g —— 选用输出宽度较小的格式输出实数
%a —— 十六进制指数的形式输出 p计数法
%hhd,%hhu,%hho,%hhx %hh限定了8位一个字节的十进制 char
%hd,%hu,%ho,%hx %h限定了16位2个字节的十进制 short
%ld,%lu,%lo,%lx %l限定了32位4个字节的十进制 long
%lld,%llu,%llo,%llx %ll限定了64位一个字节的十进制 long long
%Ld,%Lu,%Lo,%Lx %L限定了64位一个字节的十进制 long double
*/
}
3、答疑
#include<stdio.h>
void main(){
//bool b; C语言中没有bool类型,只能用char或int 代替
printf("%d\n",sizeof("你")); //4 uft-8中一个汉字占3个字节,字符串最后加一个\0,占一个字节,总共是4个字节
printf("%d\n",sizeof("你好"));//7
}