输入输出函数
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 }