1 C++风格的输入输出
C++中的基本输入输出语句是cin和cout。它们的用法如下:
- 输入:
cin >> 表达式1 >> 表达式2 >> 表达式3 ... >> 表达式n; - 输出:
cout << 表达式1 << 表达式2 << 表达式3 ... << 表达式n;
使用时请包含头文件iostream。
示例:
#include<iostream>
using namespace std;
int main(){
int x;
float y, z;
cout << "Please input" << " an int number:" << endl;
cin >> x;
cout << "The int number is x = " << x << endl;
cout<< "Please input two float number:" << endl;
cin >> y >> z;
cout << "The first float number is y = " << y <<endl;
cout << "The second float number is z = " << z <<endl;
return 0;
}提醒:
需要注意的是 C++风格的输入输出比较慢,在处理大量数据的输入输出时我们往往会选择 C 风格的输入输出(就算你写了优化代码)。
2 C 风格的输入输出
C 风格的基本输入输出是printf和scanf,它们的基本用法如下:
- printf 基本语句格式:
printf(字符串,格式符参数); - scanf 基本语句格式:
scanf(字符串,变量地址列表);
使用时请包含头文件cstdio。
改写 C++风格的示例:
#include<cstdio>
using namespace std;
int main(){
int x;
float y, z;
printf("Please input an int number:\n");
scanf("%d", &x);
printf("The int number is x = %d\n", x);
printf("Please input two float number:\n");
scanf("%f%f", &y, &z);
printf("The first float number is y = %f\nThe second float number is z = %f\n", y, z);
return 0;
}2.1 格式控制符
无论是printf还是scanf中的字符串,它们都可以包含一种被称之为格式控制符的东西,因此printf和scanf也被称为格式化输入输出。
什么是格式控制符呢?
C 无法分辨你需要输出或者输入的数据是什么类型的,它需要你明确的告诉它。为了明确的表明一个数据类型,格式控制符由此而来。如
%d可以表示输入数据按int类型输入,或输出数据按int类型输出
2.1.1 printf 中的格式控制符
表 1 针对输出字符和字符串的转换修饰符
| 修饰符 | 参数类型 | 表示 |
|---|---|---|
| %c | char | 一个单独的字符 |
| %s | char 指针 | 该指针参数所指向的字符串 |
表 2 针对输出整数的转换修饰符
| 修饰符 | 参数类型 | 表示 | | ------ | ------------ | ----------------------------------- | --- | | %d,%i | int | 十进制 | | %u | unsigned int | 十进制 | | %o | unsigned int | 八进制 | | | %x | unsigned int | 十六进制,用小写的 a、b、c、d、e、f | | %X | unsigned int | 十六进制,用大写的 A、B、C、D、E、F |
表 3 针对输出浮点数的转换修饰符
| 修饰符 | 参数类型 | 表示 |
|---|---|---|
| %f | float | 十进制浮点数 |
| %lf | double | 十进制浮点数 |
| %e、%E | double | 指数表示法,十进制 |
| %g、%G | double | 浮点数或指数表示法 |
| %a、%A | double | 指数表示法,十六进制 |
保留小数位数的输出
cppfloat x = 1.234; printf("%.2f", x); // 1.23 保留两位小数
2.1.2 scanf 中的格式控制符
scanf 函数的用法和 printf 非常相似,他们就像一对孪生兄弟,熟练掌握了 printf,那么 scanf 就不在话下,下面就简单介绍一些使用 scanf()函数的易错点。
使用 scanf 函数还必须注意以下几点:
- scanf 函数中没有精度控制,如:scanf("%.2f",&a);是非法的。不能企图用此语句输入小数为 2 位的实数。
- scanf 中要求给出变量地址,如给出变量名则会出错。如 scanf("%d",a);是非法的,应改为 scnaf("%d",&a);才是合法的。
- 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格、TAB 或回车作间隔。C++编译在碰到空格、TAB、回车或非法数据(如对
%d输入12A时,A 即为非法数据)时即认为该数据结束。 - 如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
| 修饰符 | 参数类型 | 表示 |
|---|---|---|
| %d | int | 十进制整数 |
| %lld | long long int | 十进制长整型 |
| %llu | unsigned long long int | 十进制无符号长整型 |
| %f | float; double | 十进制浮点数 |
| %c | char | 单字符 |
| %s | char 指针 | 字符串 |
2.2 一个小问题
int a; char c;
scanf("%d%c", &a, &c); // 输入 `12 m`
printf("%d %c", a, c); // 输出 `12`,m哪去了?3 换行符:endl和\n
endl:全称为std::endl,其中的l为line的意思。\n:转义字符,表示换行。
4 getchar()和putchar()
4.1 getchar
getchar()用来读取单个字符
char c = getchar();注意事项:
- 输入数字也会被当作字符处理。
- 输入多个字符时,也只读取第一个字符。
- getchar 没有分隔符,它等待用户输入,直到按回车键才会结束。
4.2 putchar
putchar()用来输出单个字符
char ch = '7';
putchar(ch); // 输出 7