C++重新入门-基本输入输出

C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作

I/O 库头文件

C++ 中用于输入输出(I/O)的库头文件主要包括 等。以下是这些头文件的简要介绍:

    • 提供了用于控制台输入输出的基本功能,如 std::coutstd::cin
    • 包含了标准流对象 std::cin(标准输入)、std::cout(标准输出)、std::cerr(标准错误输出)和 std::clog(标准日志输出)。
    • 还包含了一些基本的输入输出操作符,如 <<>>
    • 提供了文件输入输出的功能。
    • 包含了用于文件读写的类,如 std::ifstream(用于文件输入)、std::ofstream(用于文件输出)和 std::fstream(用于文件读写)。
    • 通过这些类,可以打开文件、读取文件内容、写入文件内容等操作。
    • 提供了用于格式化输出的功能。
    • 包含了 std::setwstd::setprecisionstd::setfill 等函数,可以用来设置输出的字段宽度、精度、填充字符等格式。
    • 通常用于美化输出结果,使其更易读。

这些头文件提供了 C++ 中常用的输入输出功能,可以满足大多数程序的基本需求。需要注意的是,在使用这些头文件时,需要包含相应的标准命名空间 std,或者使用 using namespace std; 语句将其引入当前命名空间,以便直接使用标准库中的对象和函数。

 标准输出流(cout)

标准输出流 cout 是 C++ 中用于向标准输出设备(通常是控制台)输出数据的流对象。它是 头文件中的一个类对象,位于 std 命名空间下。

使用 cout 可以将数据输出到控制台,这在程序调试、交互和展示信息时非常有用。下面是一些使用 cout 的基本示例:

#include 

int main() {
    // 输出字符串
    std::cout << "Hello, world!" << std::endl;

    // 输出整数
    int num = 10;
    std::cout << "The value of num is: " << num << std::endl;

    // 输出浮点数
    double pi = 3.14159;
    std::cout << "The value of pi is: " << pi << std::endl;

    // 输出多个值
    int a = 5, b = 7;
    std::cout << "a = " << a << ", b = " << b << std::endl;

    return 0;
}

上述示例中,cout 使用了插入运算符 << 来将数据插入输出流中。<< 运算符的左侧是 cout 对象,右侧是要输出的数据。可以连续使用多个 << 运算符来输出多个值。

需要注意的是,在每次输出结束后,建议使用 std::endl 来输出一个换行符,以确保输出及时刷新到输出设备。此外,endl 还会刷新输出缓冲区,确保数据立即显示在屏幕上。

另外,为了减少代码中的冗长,可以使用 using namespace std;std 命名空间引入当前命名空间,这样就可以直接使用 cout 而不必在其前面加上 std:: 前缀。

#include 
using namespace std;

int main() {
    cout << "Hello, world!" << endl;
    return 0;
}

cout 在 C++ 程序中是非常常用的,它提供了一种方便的方式来输出各种类型的数据,对于调试和交互来说尤其有用。

标准输入流(cin)

标准输入流 cin 是 C++ 中用于从标准输入设备(通常是键盘)接收输入数据的流对象。它也是 头文件中的一个类对象,位于 std 命名空间下。

使用 cin 可以从控制台获取用户的输入,并将其存储到相应的变量中。下面是一个简单的示例:

 

#include 

int main() {
    int num;
    std::cout << "Please enter an integer: ";
    std::cin >> num;
    std::cout << "You entered: " << num << std::endl;
    return 0;
}

在这个示例中,cin 使用了提取运算符 >> 来从输入流中提取数据,并将其存储到变量 num 中。用户输入的值会被赋给 num,然后通过 cout 输出到控制台。

需要注意的是,cin 会等待用户输入,并且输入的数据必须与变量的类型匹配,否则可能导致意外结果或错误。例如,如果用户输入的内容无法转换为整数,则会导致 cin 失败,而程序可能会进入错误状态。

为了防止程序陷入死循环等问题,可以在读取输入之前使用 cin 的成员函数 cin.clear() 来清除输入流的错误状态,以及 cin.ignore() 来清除输入缓冲区中的残留数据。

另外,可以通过使用 std::getline() 函数来读取一行完整的字符串,而不仅仅是一个单词或一个数字。

#include 
#include 

int main() {
    std::string name;
    std::cout << "Please enter your name: ";
    std::getline(std::cin, name);
    std::cout << "Hello, " << name << "!" << std::endl;
    return 0;
}

cin 提供了一种方便的方式来获取用户的输入,使得程序可以与用户进行交互,接收用户输入的数据,并据此执行相应的操作。

标准错误流(cerr)

标准错误流 cerr 是 C++ 中用于向标准错误设备(通常是控制台)输出错误信息的流对象。它也是 头文件中的一个类对象,位于 std 命名空间下。

cout 类似,cerr 也是一个输出流,但它通常用于输出程序的错误消息、异常信息等。与 cout 不同的是,cerr 不会被缓冲,即使在输出之后,错误消息也会立即显示在控制台上。这有助于在程序发生错误时及时地将错误信息显示给用户,而不必等待缓冲区被刷新。

下面是一个简单的示例,演示如何使用 cerr 输出错误消息:

#include 

int main() {
    int dividend = 10;
    int divisor = 0;

    if (divisor == 0) {
        std::cerr << "Error: Cannot divide by zero!" << std::endl;
        return 1; // 返回非零值表示程序发生错误
    }

    double result = dividend / divisor;
    std::cout << "Result: " << result << std::endl;

    return 0;
}

在这个示例中,如果除数 divisor 的值为零,那么程序会输出错误消息到标准错误流 cerr,然后返回一个非零值,表示程序发生了错误。否则,程序会正常执行除法操作并输出结果到标准输出流 cout

使用 cerr 可以帮助开发者及时发现和定位程序中的错误,提高程序的可靠性和稳定性。通常,cerr 用于输出关键的错误信息,而 cout 用于输出一般性的信息和结果。

标准日志流(clog)

标准日志流 clogcerrcout 类似,是 C++ 中的一个输出流对象,用于输出程序的日志信息。它也是 头文件中的一个类对象,位于 std 命名空间下。

clog 通常用于输出程序的一般性日志信息,不像 cerr 那样用于输出关键的错误信息。与 cout 相比,clog 具有与 cerr 相似的特性,但与 cerr 不同的是,clog 使用了缓冲区,因此输出的日志信息会在缓冲区满或遇到换行符时才会刷新到目标设备(通常是控制台)。

下面是一个简单的示例,演示如何使用 clog 输出日志信息:

#include 

int main() {
    int x = 10;

    // 输出日志信息
    std::clog << "Starting program..." << std::endl;
    std::clog << "The value of x is: " << x << std::endl;

    // 模拟日志记录
    for (int i = 0; i < 5; ++i) {
        std::clog << "Processing iteration " << i << "..." << std::endl;
    }

    std::clog << "Program completed." << std::endl;

    return 0;
}

在这个示例中,clog 被用于输出程序的运行日志信息,例如程序的启动、变量的值、循环迭代等。与 cout 类似,clog 使用插入运算符 << 将数据插入输出流中,并且可以与 endl 一起使用来刷新输出缓冲区并输出换行符。

总的来说,clog 是用于输出程序的一般性日志信息的输出流对象,与 cerrcout 一样,它提供了一种方便的方式来记录程序的运行状态和输出调试信息。

总的来说,C++ 中的标准输出流有三种:coutcerrclog,它们分别有着不同的特点和用途:

  1. cout

    • 用于一般性的输出,如程序的运行结果、用户提示信息等。
    • 使用缓冲区,输出数据会先存储在缓冲区中,然后在缓冲区满或遇到换行符时才会刷新输出到目标设备。
    • 适合用于一般性的输出场景,不需要立即显示的情况下使用。
  2. cerr

    • 用于输出关键的错误信息、异常信息等。
    • 不使用缓冲区,输出数据会立即显示在目标设备上,即使在其他输出之后。
    • 通常用于输出程序的错误消息,或者需要立即显示的情况下使用。
  3. clog

    • 用于输出程序的一般性日志信息。
    • 使用缓冲区,输出数据会先存储在缓冲区中,然后在缓冲区满或遇到换行符时才会刷新输出到目标设备。
    • 通常用于输出程序的运行状态、调试信息等。

总的来说,根据输出的内容和要求,可以选择合适的输出流对象进行输出。对于关键的错误信息和异常信息,应该使用 cerr;对于一般性的输出和日志信息,可以使用 coutclog

 

你可能感兴趣的:(c++,算法,开发语言)