C++(clear())

发布时间 2023-12-14 19:55:23作者: 做梦当财神

在 C++ 中,clear() 是用于清除流的状态和控制信息的成员函数,通常用于输入流(例如 std::cin)和输出流(例如 std::cout)。

对于输入流:

#include <iostream>

int main() {
    int num;
    std::cin >> num;

    // 检查输入流的状态
    if (std::cin.fail()) {
        std::cerr << "Invalid input!" << std::endl;

        // 清除输入流的状态和控制信息
        std::cin.clear();

        // 忽略缓冲区中的错误字符,直到遇到换行符
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }

    return 0;
}

在这个例子中,如果用户输入了无效的内容(如字母而不是数字),std::cin.fail() 将返回 true,然后通过 std::cin.clear() 清除输入流的状态。随后,使用 std::cin.ignore() 忽略掉缓冲区中的错误字符,以便输入流重新准备接受新的输入。

对于输出流:

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;

    // 清除输出流的状态和控制信息
    std::cout.clear();

    return 0;
}
Hello, World!

在这个例子中,std::cout.clear() 用于清除输出流的状态。通常,这不太常见,因为输出流的状态一般不会出现错误。不过,有时你可能希望在某些情况下手动清除输出流的状态。

请注意,clear() 主要用于清除流的状态信息,而不是清除流的内容。要清除缓冲区中的内容,你可以使用 flush()

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;

    // 清除输出流的缓冲区内容
    std::cout.flush();

    return 0;
}
Hello, World!

上述代码中的 std::cout.flush() 会强制将缓冲区中的内容刷新到目标设备(通常是终端)。