摘要
教你深入了解输入输出的相关知识。在此之前,你需要了解变量,表达式和语句的相关知识(略微了解)。
C语言版本的输入与输出
输出
通过入门篇,我们知道了printf()
或者printf_s()
是用于输出的函数。那么,如果要让printf_s()
输出更加丰富的东西,你需要了解下面的知识。
printf_s()函数原型
函数原型:指函数的调用方式,返回值等信息,其并没有说明内部的实现部分。
int printf_s(const char *const_Format,...);
其中第一个参数const_Format
是格式控制字符串,在其中插入占位符来控制输出,...
是可变参数,其允许你输入任意长度的参数,函数执行时,将会计算各参数的表达式。
格式控制字符串和输出控制符(又叫占位符)
1.格式控制字符串,在printf_s()
相关的函数调用中,第一个参数起名格式控制字符串。
2.格式控制字符
控制符 | 说明 | 相关单词 |
---|---|---|
%d | 整型 按十进制输出 | decimal 十进制 |
%ld | 长整型 按十进制输出 | long decimal |
%md | 十进制,m为字段的宽度,如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出。 | decimal |
%u | 无符号整型 按十进制输出 | unsigned |
%c | 字符 | char |
%f | 实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出6位,超过6位的四舍五入。 | float |
%.mf | 输出实数时小数点后保留m位,注意m前面有个点。 | float |
%o | 以八进制整数形式输出 | octonory |
%s | 字符串 | string |
%x(或%X或%#x或%#X) | 以十六进制输出整数 | hex |
下面这段程序将会说明十六进制控制符之间的区别:
#include<stdio.h>
int main()
{
int i = 47;
printf("%x\n",i);
printf("%X\n",i);
printf("%#x\n",i);
printf("%#X\n",i);
return 0;
}
这段程序将会输出
> 2f
> 2F
> 0x2f
> 0X2F
使用方法
先举个例子。假设a=2018,b=12,c=8,输出”2018/12/8”(最后换行)的程序如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 2018, b = 12, c = 8;
printf_s("%d/%d/%d\n",a,b,c);
//也可以写成:printf_s("%d/%d/%d\n",2018,12,8);
//甚至这样写也可以:printf_s("%d/%d/%d\n",1004*2,5+7,8);
system("pause");
return 0;
}
程序将会输出2018/12/8
.
观察字符串"%d/%d/%d\n"
发现,从左到右依次有三个输出控制字符,经过函数处理后,三个%d
将会依次由后面的三个参数的值代替(注意不是三个参数的名字)。
函数执行时,会将格式控制字符串扩充成一个字符数组,例如
转义字符在编译前就已经确定了,然而占位符在特定的函数中才有它的语义。
下面这段程序说明了占位符在cout
中不起作用。
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
cout << "%d/%d/%d\n";
system("pause");
return 0;
}
将输出%d%d%d