C 控制台输出
学习C - C控制台输出
要使用C在控制台上显示消息,请使用printf()在控制台上写入消息。
printf()可以传递参数,使用%d表示整型数字,%f表示浮点数。
对于char数据类型,我们可以使用%c来传递参数。
这里是一个示例代码
#include <stdio.h>
int main() {
int n = 10;
float m = 1.875;
char c = "A ";
printf("%d \n",n);
printf("%f \n",m);
printf("% .2f \n",m);
printf("% .3f \n",m);
printf("%c \n",c);
return 0;
}
上面的代码生成以下结果。
注意
您可以在%f上看到写入6位十进制数字的浮动数据。
您可以通过在点(.)后面传递数字来指定十进制数字,例如%.2f
和%.3f
。
//some floating-point combinations
#include <stdio.h>
int main(void)
{
const double RENT = 1234.99; // const-style constant
printf("*%f*\n", RENT);
printf("*%e*\n", RENT);
printf("*%4.2f*\n", RENT);
printf("*%3.1f*\n", RENT);
printf("*%10.3f*\n", RENT);
printf("*%10.3E*\n", RENT);
printf("*%+4.2f*\n", RENT);
printf("*%010.2f*\n", RENT);
return 0;
}
上面的代码生成以下结果。
printf格式
printf()函数的原型是:
int printf_s(char *format, . . .);
第一个参数是格式控制字符串。此参数的参数通常作为显式字符串常量传递给函数。
函数的可选参数是要按顺序输出的值。数字和类型必须与格式转换说明符对应。
下表显示了可选输出标志字符如何影响输出。
字符 | 使用 |
---|---|
+ | 确保有符号输出值之前总是有一个加号或减号。默认情况下,只有负值有一个符号。 |
- | 指定输出值左对齐,并填充右边的空格。输出的默认定位是正确的。 |
0 | 指定整数或浮点值应用零填充而不是空格,以填充左侧的字段宽度。 |
# | 确保:0将在八进制输出值之前,0x或0X在十六进制输出值之前,浮点输出值将包含小数点,对于g或G浮点转换字符,尾随零将不会省略。 |
Space | 指定正值或零值前面加一个空格而不是加号。 |
可选的field_width指定输出值的最小字段宽度。
如果该值需要更多字符,则该字段将被简单扩展。
如果它要求小于指定的最小值,则填充空白,除非字段宽度前面有0标志。
可选的精度说明符通常用于浮点输出值,由一个后跟一个整数的句点组成。
.n的说明符表示要为浮点值输出n个小数位。
如果要输出的值大于n个有效数字,则舍入。
如果将其用于整数转换,则它指定出现在输出中的最小位数。
字段大小
可选大小标志如下表所示。
Flag | 影响 |
---|---|
h | 以下整数转换说明符适用于短或无符号短参数。 |
hh | 以下整数转换说明符适用于signed char或unsigned char参数。 |
l | 以下整数转换说明符适用于long或unsigned long参数。 |
ll | 以下整数转换说明符适用于long long或unsigned long long参数。 |
j | 以下整数转换说明符适用于intmax_t或uintmax_t参数。 |
z | 以下整数转换说明符适用于size_t参数。 |
t | 以下整数转换说明符适用于ptrdiff_t参数。 |
L | 以下浮点转换说明符适用于长双参数。 |
您可以使用h前缀短类型。
%hd以小数形式显示一个小整数,而%ho显示一个小整数
因此,h和l前缀可以与u一起用于无符号类型。
例如,八进制形式。
用于打印无符号长类型的%lu符号。
#include <stdio.h>
int main(void)
{
unsigned int un = 3000000000; /* system with 32-bit int */
short end = 200; /* and 16-bit short */
long big = 65537;
long long verybig = 12345678908642;
printf("un = %u and not %d\n", un, un);
printf("end = %hd and %d\n", end, end);
printf("big = %ld and not %hd\n", big, big);
printf("verybig= %lld and not %ld\n", verybig, verybig);
return 0;
}
上面的代码生成以下结果。
转换整数的字符
下表列出了整数输出规范中的转换字符:
转换字符 | 生成输出 |
---|---|
d 或 i | 带符号的十进制整数 |
o | 无符号八进制整数 |
u | 无符号十进制整数 |
x | 具有小写十六进制数字的无符号十六进制整数a,b,c,d,e,f |
X | 作为x,但具有大写的十六进制数字A,B,C,D,E,F |
以下代码显示字符的代码编号
#include <stdio.h>
int main(void)
{
char ch;
printf("Please enter a character.\n");
scanf("%c", &ch); /* user inputs character */
printf("The code for %c is %d.\n", ch, ch);
return 0;
}
上面的代码生成以下结果。
转换字符浮点型
下表列出了浮点型输出规范中的转换字符:
转换字符 | 生成输出 |
---|---|
f 或 F | 带符号的十进制值 |
e | 带指数的带符号的十进制值 |
E | 作为e,但E代表指数而不是e |
g | e或f取决于价值和精度的大小 |
G | 作为g,但E代表指数值 |
a 或 A | 以十六进制形式显示双值,十六进制值以0x或0X为前缀,任何以p或P为前缀的指数。 |
下表列出了指针的输出规范中的转换字符:
转换字符 | 生成输出 |
---|---|
p | 将值作为指针输出。 |
下表列出了字符输出规范中的转换字符:
转换字符 | 生成输出 |
---|---|
c | 单个字符或精确字符 |
s | 直到达到 '\0'或精度字符已输出的所有字符 |
#include <stdio.h>
int main(void)
{
printf("%x %X %#x\n", 31, 31, 31);
printf("**%d**% d**% d**\n", 42, 42, -42);
printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);
return 0;
}
上面的代码生成以下结果。
转义序列
您可以在printf()的格式控制字符串中包含空格字符。
空格字符是换行符,回车符,换页,空格和制表符。
其中一些由转义序列表示,这些如下表所示。
转义序列 | 描述 |
---|---|
\b | 退格 |
\f | 换页或页弹出 |
\n | 换行 |
\r | 回车(打印机)或移动到当前行的开头输出到屏幕 |
\t | 水平制表符 |
您使用转义序列\\输出反斜杠字符\。
要将一个%字符写入stdout,您可以使用%%。
整数输出
我们首先尝试一个整数输出格式的样本。
#include <stdio.h>
int main(void)
{
int i = 15, j = 123, k = 4567;
long long li = 56789LL, lj = 12345678901LL, lk = 23456789LL;
printf("i = %d j = %d k = %d i = %6.3d j = %6.3d k = %6.3d\n",
i ,j, k, i, j, k);
printf("i = %-d j = %+d k = %-d i = %-6.3d j = %-6.3d k = %-6.3d\n",
i ,j, k, i, j, k);
printf("li = %d lj = %d lk = %d\n", li, lj, lk);
printf("li = %lld lj = %lld lk = %lld\n", li, lj, lk);
return 0;
}
上面的代码生成以下结果。
填充
以下示例显示了填充和宽度控制。
#include <stdio.h>
int main(void)
{
int k = 678;
// Display formats as heading then display the values
printf("%%d %%o %%x %%X\n");
printf("%d %o %x %X\n", k, k, k, k );
printf("\n|%%8d |%%-8d |%%+8d |%%08d |%%-+8d |\n");
printf("|%8d |%-8d |%+8d |%08d |%-+8d |\n", k, k, k, k, k );
return 0;
}
上面的代码生成以下结果。
输出浮点值
以下代码显示了浮点输出选项。
#include <stdio.h>
int main(void) {
float fp1 = 345.678f, fp2 = 1.234E6f;
double fp3 = 234567898.0, fp4 = 11.22334455e-6;
printf("%f %+f %-10.4f %6.4f\n", fp1, fp2, fp1, fp2);
printf("%e %+E\n", fp1, fp2);
printf("%f %g %#+f %8.4f %10.4g\n", fp3,fp3, fp3, fp3, fp4);
return 0;
}
上面的代码生成以下结果。
字符输出
printf()有两个字符数据选项:单个字符为%c,字符串为%s。
%lc和%ls用于输出宽字符。
#include <stdio.h>
#include <limits.h> // For CHAR_MAX
#include <ctype.h> // For isprint()
int main(void)
{
int count = 0;
printf("The printable characters are the following:\n");
// Iterate over all values of type char
for(int code = 0 ; code <= CHAR_MAX ; ++code)
{
char ch = (char)code;
if(isprint(ch)) {
if(count++ % 32 == 0)
printf("\n");
printf(" %c", ch);
}
}
printf("\n");
return 0;
}
上面的代码生成以下结果。
例子
以下代码显示如何打印长字符串。
#include <stdio.h>
int main(void)
{
printf("Here"s one way to print a ");
printf("long string.\n");
printf("Here"s another way to print a \
long string.\n");
printf("Here"s the newest way to print a "
"long string.\n"); /* ANSI C */
return 0;
}
上面的代码生成以下结果。
例2
printf()返回打印的字符数。
#include <stdio.h>
int main(void)
{
int bph2o = 212;
int rv;
rv = printf("%d F is water"s boiling point.\n", bph2o);
printf("The printf() function printed %d characters.\n",
rv);
return 0;
}
上面的代码生成以下结果。