2.输入和输出

本文详细介绍了C++中的scanf和printf函数用于格式化输入输出,以及cin和cout的使用方法。重点讨论了数据类型匹配、格式控制符、四舍五入、字符串处理和取消同步流以提高效率等内容。
摘要由CSDN通过智能技术生成

输入和输出

1.scanf和printf

示例一

int a, b;
scanf("%d %d", &a, &b);   // 输入2 9
printf("%d, %d\n", a, b); // 输出2,9

示例二

double a, b;
scanf("%lf %lf", &a, &b);
printf("%.2lf, %.3lf\n", a, b); // 自动四舍五入 
// 输入:3 5
// 输出:3.00, 5.000 

如何对一个数实现四舍五入?

利用C++中<cmath>库中的round()函数,它用于将一个浮点数四舍五入到最接近的整数。

在 C 语言中 round 函数用于对浮点数 float 或者 double或者 longdouble 四舍五入,也是一个比较常用的函数,其返回值类型为double,并非int类型

示例三

char c1, c2;
scanf("%c:%c", &c1, &c2);
printf("%c,%c", c1, c2);
// 输入:a:b
// 输出:a,b

%c格式说明符用于读取一个字符。它会读取输入流中的下一个字符,包括空格、制表符、换行符等。

示例四

char s[10];
scanf("%s", s);
printf("%s", s);
// 输入:Hello World
// 输出:Hello

%s输入遇到空格和回车就会停下,所以输入Hello World, %s会认为之间的空格是分割,所以只读取了Hello。

示例五

char s[15];
scanf("%[^\n]", s);
printf("%s", s);
// 输入:Hello World
// 输出:Hello World

其中,[]中是一个正则表达式,表示只要不是回车就读进去。

数据类型格式控制符
char%c
int%d
short%hd
long%ld
long long%lld
unsigned int%u
unsigned short%hu
unsigned long%lu
unsigned long long%llu
float%f
double%lf
long double%Lf
string%s

scanf和printf的优势:

1)格式化输入和输出

2)效率高

3)对于浮点数,精确几位小数的设置方便等

scanf和printf的缺点:

1)需要选定正确的格式控制符,不同类型的格式控制符不同,容易出错

2)cin、cout取消同步流与scanf、printf的效率相等

2.cin和cout

示例一

int a, b;
cin >> a >> b; // 自动判断变量类型 
cout << a << " " << b << "\n"; 
// 输入:2 3
// 输出:2 3

示例二

double a, b;
cin >> a >> b;
cout << a << " " << b << "\n";
// 输入: 2 3
// 输出: 2 3

示例三

double a, b;
cin >> a >> b;
cout << fixed << setprecision(3) << a << " " << b << "\n";
// 输入:2 3
// 输出:2.000 3.000

示例四

char ch;
cin >> ch;
cout << ch;
// 输入: a
// 输出: b

示例五

char s[10];
cin >> s;
cout << s;
// 输入:lan qiao
// 输出:lan
// 注意:cin输入字符串也是遇到空格或回车就结束。

示例六

string s;
getline(cin, s); 
cout << s;
//输入:lan qiao
//输出:lan qiao
//getline从输入流中读取一行文本, 遇到空格不结束,遇到回车结束

3.取消同步流

由于cin和cout需要自动判断变量类型等内部原因,读写效率比scant和printf更低。当数据量较大时,可能导致程序运行超时。我们可以通过取消同步流来加速cin和cout,加速后效率相差无几。

取消同步流

ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

4.示例

4.1 示例一

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 150;
int a[N];

int main() {
	// 取消同步流
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	
	int n; cin >> n; // 输入数组大小
	for(int i = 1; i <= n; i ++) cin >> a[i]; // 遍历数组并输入 
	for(int i = n; i >= 1; i --) cout << a[i] << " ";
	 
	return 0;
} 

输入输出

5
1 2 3 4 5
5 4 3 2 1

4.2 示例二

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 150;
char s[N]; 

int main() {
	// 取消同步流
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	
	cin >> s + 1; // 从s[1]开始输入
	for(int i = 1; s[i]; i ++) cout << s[i]; 
	
	return 0;
} 

输入输出

lanqiao
lanqiao

4.3 示例三

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 150;
char s[N]; 

int main() {
	
	scanf("%s", s);
	for(int i = 0; s[i]; i ++) cout << s[i] << '\n';
	return 0;
} 

输入输出

l
a
n
q
i
a
o

4.4 示例四

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 150;

double a[N];

int main() {
	
	int n;
	scanf("%d", &n);
	for(int i = 1; i <= n; i ++) scanf("%lf", &a[i]);
	double sum = 0;
	for(int i = 1; i <= n; i ++) sum += a[i];
	printf("%.2lf\n", sum); // 保留2位小数, 并且四舍五入 
	return 0;
} 

输入输出

5
1.0 2.313 6.22 5.47 9.299
24.30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值