[C&C++]学习C&C++基础篇:输入与输出

create: 2018-12-08 | update:2018-12-08

摘要

教你深入了解输入输出的相关知识。在此之前,你需要了解变量,表达式和语句的相关知识(略微了解)。


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

深入理解printf_s()