3.1 printf 函数
- 显示的值可以是常量,变量或者更加复杂的表达式
- 格式串可以是普通字符或者转换说明,转换说明以 % 开头
note
- C 语言编译器不会检测格式串中转换说明的数量是否和输出项的数量想匹配
// 转换说明多于输出项#include <stdio.h>int main(){int i=10,j=20;printf("%d %d %d\n",i,j);}// 输出,其中 17 是无意义数值10 20 17// 转换说明少于输出项#include <stdio.h>int main(){int i=10,j=20;printf("%d\n",i,j);}// 输出,不会输出 j10
- C 语言编译器不会检测格式串中转换说明的类型是否和输出项的类型匹配
#include <stdio.h>int main(){int i=10,j=20;float k=3.14;printf("%f,%d\n",i,k);}// 输出 两个无意义的值0.000000,1610612736
3.1.1 转换说明
1. 格式
%m.pX
note:
- m,p 都是可选项,且都是整型常量,X 代表字母(d,f,c … )
- 如果省略 p ,那么 小数点也可以省略
%10f - 如果省略 m,但小数点不能省略
%.2f```c /** - m 表示最小字段宽度 a. 指定要显示的最小字符数量 b. 如果要打印的字符少于 m,则显示的值向右对其,即在数值前面加入空格补齐 c. 如果要打印的字符大于 m,则显示最大的长度,不会丢失数值 d. 如果在前面添加负号,则向左对齐,即在输出值右侧添加空格
*/
include
int main() { int i = 1234;
printf("%4d\n",i);printf("%5d\n",i);printf("%3d\n",i);printf("%-4d\n",i);printf("%-5d\n",i);printf("%-3d\n",i);
}
// 输出 1234 1234 1234 1234 1234 1234
/**
- p 的解释依赖于 X a. X = d 时,表示最小字符长度,若长度不够则用 0 填充 b. X = f 时,表示小数点后的位数。若 p 在范围内,则截断已知数值;若 p 超过,则延长精确度
*/
include
int main() { int i = 1234; float j = 3.1415926;
printf("%.6d\n",i); // 001234printf("%.6f\n",j); // 3.141593printf("%.10f\n",j); // 3.1415925026
}
<a name="gOMAG"></a># 3.2 scanf 函数note1. 使用 scanf 时,必须要检查转换说明的数量是否与输入变量的数量想匹配,且对应关系是否一致<a name="GpADV"></a>## 3.2.1 工作方法<a name="jreoJ"></a>##### 1. 在读取时忽略空格```c#include <stdio.h>int main(){int i,j,k;scanf("%d%d%d",&i,&j,&k);printf("i=%d,j=%d,k=%d\n",i,j,k);return 0;}// 输入1 2 100// 输出i=1,j=2,k=100
2. 输入格式必须完全和 “ “ 中的格式相同(除了空格可以被忽略)
#include <stdio.h>int main(){int i,j,k;int o,p,q;// 输入 1,2,3 正确// 输入 123 错误// 输入 1 2 3 错误// ...scanf("%d,%d,%d",&i,&j,&k);printf("i=%d,j=%d,k=%d\n",i,j,k);return 0;}
#include <stdio.h>int main(){int o,p,q;scanf("o=%d,p=%d,q=%d",&o,&p,&q);printf("o=%d,p=%d,q=%d",o,p,q);return 0;}// 输入o=1,p=2,q=3// 输出o=1,p=2,q=3
3.3 puts 与 gets
1. puts
# include <stdio.h>int main(){char str[] = "hahahahah";puts(str);return 0;}
2. gets
# include <stdio.h>int main(){char str[30];gets(str);puts(str);return 0;}
