前言
在C++中,输入与输出是程序与用户进行交互的基本方式。C++提供了多种方式进行数据的输入与输出,其中最常用的是printf
、scanf
、cin
和cout
。此外,我们还会讨论如何取消cin
和cout
的同步流,以及了解各种转义字符的用法。
1.printf函数
printf是C语言标准库中用于格式化输出的函数,它在C++中依然可用。printf函数可以输出各种类型的数据,包括整数、浮点数、字符和字符串等。
cpp
int printf(const char* format, ...);
示例:
cpp
#include <cstdio>
int main() {
int a = 10;
float b = 20.5;
printf("整数:%d,浮点数:%f\n", a, b);
return 0;
}
输出
cpp
整数:10,浮点数:20.500000
格式化符号 | 描述 | 示例 |
---|---|---|
%d |
整数(十进制) | printf("%d", 123); 输出 123 |
%c |
字符 | printf("%c", 'A'); 输出 A |
%s |
字符串 | printf("%s", "Hello"); 输出 Hello |
%f |
浮点数(十进制) | printf("%f", 3.14159); 输出 3.141590 |
%e |
浮点数(科学计数法) | printf("%e", 3.14159); 输出 3.141590e+00 |
%E |
浮点数(科学计数法,大写E) | printf("%E", 3.14159); 输出 3.141590E+00 |
%g |
浮点数(根据大小自动选择%f或%e) | printf("%g", 3.14159); 输出 3.14159 |
%G |
浮点数(根据大小自动选择%f或%E) | printf("%G", 3.14159); 输出 3.14159 |
%% |
输出百分号% |
printf("%%"); 输出 % |
%o |
整数(八进制) | printf("%o", 10); 输出 12 |
%x |
整数(小写十六进制) | printf("%x", 255); 输出 ff |
%X |
整数(大写十六进制) | printf("%X", 255); 输出 FF |
%u |
整数(无符号十进制) | printf("%u", 4294967295U); 输出 4294967295 |
%lu |
长整数(无符号十进制) | printf("%lu", 4294967295UL); 输出 4294967295 |
%llu |
长长整数(无符号十进制) | printf("%llu", 18446744073709551615ULL); 输出 18446744073709551615 |
2.scanf 函数
scanf函数用于从标准输入(通常是键盘)读取格式化的输入。与printf类似,scanf也使用格式化字符串来指定输入数据的类型和格式。
语法:
cpp
int scanf(const char* format, ...);
示例:
cpp
#include <cstdio>
int main() {
int a;
float b;
printf("请输入一个整数和一个浮点数:\n");
scanf("%d %f", &a, &b);
printf("你输入的整数是:%d,浮点数是:%f\n", a, b);
return 0;
}
用户输入:
cpp
15 30.75
输出:
cpp
你输入的整数是:15,浮点数是:30.750000
3.cin 和 cout
在C++中,cin和cout是iostream库中的两个对象,分别用于从标准输入读取数据和向标准输出写入数据。它们比scanf和printf更加面向对象,并且与C++的风格更加一致。
-
cin:用于从标准输入(键盘)读取数据。
-
cout:用于向标准输出(屏幕)输出数据。
示例:
cpp
#include <iostream>
int main() {
int a;
float b;
std::cout << "请输入一个整数和一个浮点数:";
std::cin >> a >> b;
std::cout << "你输入的整数是:" << a << ",浮点数是:" << b << std::endl;
return 0;
}
用户输入:
cpp
20 40.25
输出:
cpp
你输入的整数是:20,浮点数是:40.25
cin是默认以空格、回车作为间隔的,所以不会读到输入中的空格和回车,如果你想读取一整行的字符串,可以尝试getline()函数或者gets()函数。
4.取消同步流
默认情况下,cin和cout与scanf和printf是同步的,这意味着在读取和输出之间会有缓冲。有时为了提高效率,我们可能需要取消这种同步。
有些题目的输入输出较大(例如到了几百万),如果不取消同步流将导致输入输出很慢从而超时。
cpp
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
示例:
cpp
#include <iostream>
int main() {
// 取消同步
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int a;
float b;
std::cin >> a >> b;
std::cout << a << " " << b << std::endl;
return 0;
}
5.转义字符
转义字符是一种特殊的字符序列,用于表示不可打印的字符或具有特殊含义的字符。以下是一些常用的转义字符:
转义字符 | 描述 |
---|---|
\n | 换行 |
\t | 制表符(Tab) |
\b | 退格 |
\r | 回车 |
\ | 反斜杠 |
" | 双引号 |
' | 单引号 |
示例:
cpp
#include <iostream>
int main() {
std::cout << "Hello, \\t World!" << std::endl; // 输出 "Hello, \t World!",\t表示制表符
std::cout << "This is a test of \"double quotes\" and 'single quotes'." << std::endl;
return 0;
}
以上就是关于C++中printf、scanf、cin、cout的用法,取消同步流以及转义字符的详细介绍。这些工具在C++编程中非常常用,掌握它们对于编写高效且易于维护的程序至关重要。
真心给大家推荐由我主讲的性价比超高的《算法基础课》,想要学习更多ACM/蓝桥杯/CSP/NOIP算法竞赛知识,无论你是想要竞赛拿奖的大学生、想要在笔试面试中脱颖而出、或者是对计算机编程感兴趣的小朋友,都可以学习,一定不要错过!点此了解:https://www.starrycoding.com/course/1
适用对象广泛
内容紧贴考纲,每节课约1.5小时高密度知识
广受好评,学习氛围浓厚,平等互助,拒绝歧视与绑架
视频、习题、文档,想学就学
没错,在学习算法的时候你甚至可以看V。
最最最最最最最最重要的是,由于课程的准备、录制、平台(前后端和评测机)的开发、推广都是由我一人完成,所以成本压的非常非常低,算法基础课仅售39元。
欢迎加入StarryCoding官方用户Q群:746470220(官网www.starrycoding.com)
悄悄说:StarryCoding平台还有算法中级课(可以自行了解)。