(2)如果在“格式控制”字符串中除了格式说明以外还要其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。说明:这里用到了sqrt函数,所有要用到数学库,在头文件加上#include <math.h>。逗号表达式的求解过程:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。(3)在用“%c”格式输入字符时,空格字符和转义字符都作为有用字符输入。eg:输入三
1.逗号运算符和逗号表达式
表达式1,表达式2
逗号表达式的求解过程:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。
#include
int main(void)
{
printf("%d\n", 3 * 5, 2 * 4, 3 + 5);
return 0;
}
结果为:
2.字符数据的输入输出
putchar函数
putchar函数的作用是向终端输出一个字符,一般形式为putchar(c)。
#include
int main(void)
{
putchar('H');
putchar('e');
putchar('l');
putchar('l');
putchar('o');
putchar('\n');
return 0;
}
结果为:
getchar函数
getchar函数的作用是从终端输入一个字符。
#include
int main(void)
{
char i;
i = getchar();
i -= 32;
putchar(i);
putchar('\n');
return 0;
}
结果为:
注:实现大小写的转换。
3.格式的输入与输出
printf函数
printf格式字符
字符 | 对应数据类型 | 含义 | 示例 |
---|---|---|---|
d/i | int | 输出十进制有符号整数,i是老式写法 | printf("%d",123); 输出123 |
o | unsigned int | 无符号8进制整数(不输出前缀0) | printf("0%o",123); 输出0173 |
u | unsigned int | 无符号10进制整数 | printf("%u",123); 输出123 |
x/X | unsigned int | 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x) | printf("0x%x 0x%X",123,123); 输出0x7b 0x7B |
f/lf | float(double) | 单精度浮点数用f,双精度浮点数用lf(printf可混用,但scanf不能混用) | printf("%.9f %.9lf",0.000000123,0.000000123); 输出0.000000123 0.000000123。注意指定精度,否则printf默认精确到小数点后六位 |
F | float(double) | 与f格式相同,只不过 infinity 和 nan 输出为大写形式。 | 例如printf("%f %F %f %F\n",INFINITY,INFINITY,NAN,NAN); 输出结果为inf INF nan NAN |
e/E | float(double) | 科学计数法,使用指数(Exponent)表示浮点数,此处”e”的大小写代表在输出时“e”的大小写 | printf("%e %E",0.000000123,0.000000123); 输出1.230000e-07 1.230000E-07 |
g | float(double) | 根据数值的长度,选择以最短的方式输出,%f或%e | printf("%g %g",0.000000123,0.123); 输出1.23e-07 0.123 |
G | float(double) | 根据数值的长度,选择以最短的方式输出,%F或%E | printf("%G %G",0.000000123,0.123); 输出1.23E-07 0.123 |
c | char | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 | printf("%c\n",65) 输出A |
s | char* | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以空字符’\0‘结尾) | printf("%s","测试test"); 输出:测试test |
p | void* | 以16进制形式输出指针 | printf("%010p","lvlv"); 输出:0x004007e6 |
% | 字符% | 输出字符‘%’(百分号)本身 | printf("%%"); 输出:% |
字符 | 说明 |
l | 用于长整型整数,可加在格式符d、 o、x、u前面 |
m(代表一个正整数) | 数据最小宽度 |
n(代表一个正整数) | 对实数,表示输出n位小数;对字符串,表示截取的字符个数 |
eg:
#include
int main(void)
{
printf("%.2f\n", (int)(123.4567 * 100) / 100.0);
return 0;
}
结果为:
scanf函数
格式字符 | 说明 |
d,i | 用来输入有符号的十进制整数 |
u | 用来输入无符号的十进制整数 |
o | 用来输入无符号的八进制整数 |
x,X | 用来输入无符号的十六进制整数 |
c | 用来输入单个字符 |
s | 用来输入字符串 |
f | 用来输入实数,可以用小数形式或指数形式输入 |
字符 | 说明 |
l | 用于输入长整型数据(可用%ld,%lo,%lx,%lu)以及double型数据(用%lf或%le) |
h | 用于输入短整型数据(可用%hd,%ho,%hx) |
eg:输入一个整型的数,取前三位为a,接着三位为b。
#include
int main(void)
{
int a, b;
scanf("%3d%3d", &a, &b);
printf("a = %d b = %d\n", a , b);
return 0;
}
结果为:
修改上述代码:
scanf("%3d %*2d %3d", &a, &b);
结果为:
%*2d表示读入2位整数但不敷给任何变量,即45被跳过。
使用scanf函数时应该注意的问题
(1)scanf函数中的“格式控制”后面应当是变量地址,而不是变量名。
scanf("%d%d", &a, &b);
(2)如果在“格式控制”字符串中除了格式说明以外还要其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符
scanf("%d,%d", &a, &b);
应输入:1,2
(3)在用“%c”格式输入字符时,空格字符和转义字符都作为有效字符输入。
scanf("%c%c%c", &c1, &c2, &c3);
eg:输入三角形的边长(必须满足两边之和大于第三边),计算三角形的面积
#include
#include
int main(void)
{
double a, b, c, s, area;
printf("请输入三角形的三边:\n");
scanf("%lf%lf%lf", &a, &b, &c);
s = (a + b + c) / 2.0;
area = sqrt ( s * (s - a) * (s - b) * (s - c));
printf("%f\n", area);
return 0;
}
结果为:
说明:这里用到了sqrt函数,所有要用到数学库,在头文件加上#include <math.h>。