首页 > 编程笔记 > C++笔记 阅读:3

C++中的输入输出语句(cin/cout和scanf/printf)

对于任何一个程序来说,输入/输出是与用户交互的核心功能。用户通过输入给程序提供数据,程序再通过输出向用户显示处理结果。

scanfprintf

scanf() 和 printf() 是C语言中的输入/输出函数,不过在 C++ 中也可以使用,并且具有较高的执行速度。

scanf() 用于从标准输入(通常是键盘)读取数据。例如:
scanf("%d", &num);
用于读取用户输入的一个整数,然后把这个整数的值存储到变量 num 中。在这个函数中,"%d" 是格式符,表示要读取的数据是整数类型。

注意,在 num 前面要加上“&”表示取出 num 这个变量的地址,因为 C语言是面向过程的编程语言,并且没有引用类型,所以想要在函数内改变一个变量的值,就得把变量的地址传入函数。

printf() 用于向标准输出(通常是屏幕)写入数据。例如:
printf("%d", num);
把变量 num 的值显示在屏幕上。同样,"%d" 表示我们要输出整数类型的数据。

cin和cout

C++ 提供了更高层次的输入/输出方式,分别是 cin 和 cout,它们是基于标准输入/输出对象的。

cin 用于从标准输入读取数据。例如:
cin >> num;
用于读取用户输入的一个整数(假设 num 是一个整数变量),然后把这个整数的值存储到变量 num 中。

cout 用于向标准输出写入数据。例如:
cout << num;
用于把变量 num 的值显示在屏幕上。

与 scanf() 和 printf() 相比,cin 和 cout 的优势在于,它们能够自动识别变量类型,无须指定格式符,这使得代码更加简洁易读。例如以下代码:
#include <iostream>
#include <string>
using namespace std;

int main() {
    int num;               // 定义一个整型变量 num
    string str;            // 定义一个字符串变量 str

    // 从标准输入读取一个整数和一个字符串,分别赋值给 num 和 str
    cin >> num >> str;

    // 将 num 和 str 输出到标准输出
    cout << num << str;

    return 0;              // 返回 0 表示程序正常结束
}
在这个示例程序中,首先引入(即包含)了头文件,然后使用 std 命名空间避免频繁加前缀。接下来,定义了一个整型变量 num 和一个字符串变量 str。通过使用 cin 对象,我们可以从标准输入读取一个整数和一个字符串,并将它们分别存储在变量 num 和 str 中。最后,我们使用 cout 对象将 num 和 str 的值输出到标准输出。

虽然输入/输出的数据类型不同,但是我们无须修改输入/输出的代码,无论 num 和 str 两个变量是什么数据类型,cin 和 cout 两行代码都不针对不同数据类型进行修改。

与 scanf() 和 printf() 相比,cin 和 cout 的速度稍慢,在处理大量输入/输出的情况下,通常可以通过关闭同步流来提高读写速度,这也是算法竞赛中比较好的实践。这可以通过以下代码实现:
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);

各种输入/输出示例

1) 输入/输出整数

使用 C 语言的 scanf() 函数读取整数,然后使用 printf() 函数输出整数:
scanf("%d", &num);
printf("%d", num);

使用 C++ 的 cin 对象读取整数,然后使用 cout 对象输出整数:
cin >> num;
cout << num;

2) 输入/输出浮点数

使用 C 语言的 scanf() 函数读取浮点数,然后使用 printf() 函数输出浮点数:
scanf("%f", &x);
printf("%f", x);

使用 C++ 的 cin 对象读取浮点数,然后使用 cout 对象输出浮点数:
cin >> x;
cout << x;

3) 输入/输出字符串

使用 C 语言的 scanf() 函数读取字符串,然后使用 printf() 函数输出字符串:
scanf("%s", str);
printf("%s", str);

使用 C++ 的 cin 对象读取字符串,然后使用 cout 对象输出字符串:
cin >> str;
cout << str;

4) 输入/输出数组

C语言:
for (i = 0; i < n; i++) {
    scanf("%d", &arr[i]);
    // 使用循环逐个读取数组元素
}

for (i = 0; i < n; i++) {
    printf("%d ", arr[i]);
    // 使用循环逐个输出数组元素
}

C++:
for (int i = 0; i < n; ++i) {
    cin >> a[i];
    // 使用循环逐个读取数组元素
}

for (int i = 0; i < n; ++i) {
    cout << a[i] << ' ';
    // 使用循环逐个输出数组元素,并在元素后输出一个空格字符
}

相关文章