C++中数据的输入输出介绍

C++中数据的输入输出介绍

C++中数据的输入输出涉及到的文件

<iostream>:这是C++标准库中最常用的头文件之一,包含了进行标准输入输出操作的类和对象,如std::cin、std::cout、std::endl等。

<iomanip>:该头文件提供了一些用于控制输入输出格式的函数和流控制符,比如std::setprecision、std::setw、std::fixed等。

<fstream>:这个头文件用于文件输入输出操作。它提供了用于读写文件的输入输出流类,如std::ifstream、std::ofstream等。

<sstream>:该头文件定义了用于字符串流的类,如std::istringstream、std::ostringstream等。它们可以方便地将数据从字符串转换为其他类型,或者将其他类型的数据转换为字符串。

<cstdio>或<stdio.h>:这是C语言中的头文件,也可以在C++中使用。它提供了一些与C标准库相关的输入输出函数,如scanf、printf、fgets、fputs等。

需要根据实际需求选择合适的头文件来进行数据的输入输出操作。例如,如果只是进行标准输入输出,只需要包含<iostream>即可;如果需要读写文件,需要包含<fstream>;如果需要进行字符串流的操作,需要包含<sstream>等。

下面介绍几种C++中数据的输入输出几种基本方式。

使用<iostream>头文件的cin和cout,getline函数和puts函数

cin和cout:这是C++标准库提供的输入输出流对象,用于从标准输入读取数据和向标准输出写入数据。例如,读入一个整数可以使用cin和>>运算符,输出一个整数可以使用cout和<<运算符:

#include <iostream>

int main() {
    int num;
    std::cout << "请输入一个整数: ";
    std::cin >> num;
    std::cout << "您输入的整数是: " << num << std::endl;

    return 0;
}

在上面的例子中,我们使用std::cin从标准输入读取一个整数,并使用std::cout将其输出到标准输出。

getline函数用于从输入流中读取一行字符串,并保存到指定的变量中。puts函数用于将字符串输出到标准输出。getline函数可以用来读入一行字符串,而puts函数可以用来输出一个字符串。getline函数从输入流中读取一行字符,直到遇到换行符或文件结束符(\n或EOF)为止。puts函数将字符串打印到标准输出并自动加上换行符。需要注意的是,puts函数只能输出C风格的字符串,需要将string类型的字符串转换成C风格的字符指针,可以使用字符串的c_str()方法。使用getline和puts这两个函数的示例代码如下:

#include <iostream>

int main() {
    std::string str;
    std::cout << "请输入一行字符串: ";
    std::getline(std::cin, str); // 读入一行字符串
    std::cout << "您输入的字符串是: " << str << std::endl;

    const char* cstr = str.c_str();
    std::puts(cstr); // 输出字符串

    return 0;
}

测试运行:

示例中“const char* cstr = str.c_str();”这行代码的作用是将 std::string 类型的字符串 str 转换为 C 风格的字符串(以 null 结尾的字符数组)。

为什么要使用 c_str() 函数呢?因为 std::puts() 函数接受的参数是一个 C 风格的字符串(即以 null 结尾的字符数组),而不是 C++ 的 std::string 类型。所以,在调用 std::puts() 函数之前,我们需要使用 c_str() 函数来获取 C 风格的字符串。C++ 中的 std::string 类型提供了一个成员函数 c_str(),它返回一个指向字符串数据的常量指针。通过调用 c_str() 函数,我们可以获取 std::string 对象中存储的字符数组的地址。

使用<cstdio>头文件的getchar 、 putchar及scanf、printf函数

getchar 和 putchar函数是两个常用的字符输入输出函数。

getchar() 函数用于从标准输入流(通常是键盘)读取单个字符。它不需要任何参数,并且会等待用户输入字符后才能继续执行程序。示例用法如下:

#include <cstdio>

int main() {
    char c = getchar(); // 从标准输入读取一个字符
    putchar(c); // 将字符输出到标准输出
    return 0;
}

putchar() 函数用于将一个字符输出到标准输出流(通常是控制台)。示例用法如下:

#include <cstdio>

int main() {
    char c = 'A';
    putchar(c); // 将字符 'A' 输出到屏幕
    return 0;
}

顺便提示:

getchar() 和 putchar() 最初设计用于处理 ASCII 字符,但它们也具备处理中文字符的功能。中文字符通常使用多字节编码(如UTF-8),怎么理解?

 getchar() 和 putchar() 函数可以处理中文字符,是因为它们是通过底层的操作系统或编译器提供的字符输入输出功能来实现的。底层的字符输入输出功能可能会根据不同的操作系统或编译器而有所差异,对于一些特殊的字符或编码方式,可能会出现问题。所以在处理中文字符时,最好使用支持中文字符的更高级的输入输出函数,如使用 <iostream> 头文件中的 std::cin 和 std::cout。

scanf和printf是C语言中常用的输入输出函数,也可以在C++中使用。scanf用于从标准输入读取数据,而printf用于向标准输出写入数据。如果要在C++中使用需要注意一些细节。一般情况下,scanf和printf可以和cin和cout等价地使用。例如,读入一个整数可以使用scanf,输出一个整数可以使用printf:

#include <cstdio>

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num); // 读入一个整数
    printf("您输入的整数是: %d\n", num); // 输出一个整数到标准输出

    return 0;
}

需要注意的是,scanf和printf需要使用格式化字符串来指定输入输出的数据类型,因此需要多写一些代码。同时,scanf的输入参数需要使用"取地址符"&,而printf的输出参数不需要。

scanf和printf格式化输入输出介绍

printf函数是用于格式化输出的函数,它可以将数据格式化输出到控制台或文件中。基本语法为:

printf("格式控制字符串", 值1, 值2, ...);

其中,格式控制字符串用来指定要输出的数据类型和格式。值1、值2 等表示要输出的变量或常量,可以有多个。格式控制字符串,包含了输出的格式。可以使用以下的转换字符以及相应的格式化说明符来指定输出的类型:

%d:以十进制整数的形式输出。

%f:以浮点数的形式输出。

%c:以字符的形式输出。

%s:以字符串的形式输出。

%p:以指针的形式输出。

%x:以十六进制数的形式输出。

%.3f:其中".3f" 则是具体的格式控制符。".3" 表示精度限制,即小数点后保留三位有效数字。而 "f" 则表示浮点数类型。

scanf函数是用于格式化输入的函数,它可以从控制台或文件中按照指定的格式读取数据。

基本语法为:

scanf("格式控制字符串", 地址表达式1, 地址表达式2, ...);

其中,格式控制字符串用来指定要输入的数据类型和格式。地址表达式用来表示变量在内存中的地址,这样 scanf 函数才能将输入的数据存放到对应的变量中。格式控制字符串,包含了输入的格式。可以使用与printf相同的转换字符和格式化说明符来指定输入的类型。

下面是一个使用scanf和printf函数的完整示例:

#include <cstdio>

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    printf("您输入的整数是: %d\n", num);

    double floatingNum;
    printf("请输入一个浮点数: ");
    scanf("%lf", &floatingNum);
    printf("您输入的浮点数是: %.2f\n", floatingNum);

    return 0;
}

在这个示例中,首先使用 printf 输出提示信息,然后使用 scanf 从用户输入中读取数据。读取整数时,使用 %d 格式符,并通过 & 取地址操作符将变量的地址传递给 scanf;读取浮点数时,使用 %lf 格式符,同样需要使用 & 取地址操作符来传递变量地址。使用 printf 将读取到的数据格式化输出到屏幕上。注意,在输出浮点数时,我们使用了 %.2f 的格式控制,限制只显示两位小数。

【取地址符"&"的作用是取变量的地址。地址标识内存的位置,相当于容器(如“盒子”)号码。
假设有一个变量a,相当于名为a的容器,&a表示找到了这个容器的号码,就可以使用这个容器了。】

文件输入输出

C++中使用文件输入输出需要包含<fstream>头文件,常用的类包括ifstream(输入文件流)和ofstream(输出文件流)。可以使用它们来打开文件、读写文件、关闭文件——open、read、write和close函数等。)等操作。下面是一个将一个文件的内容复制到另一个文件中的示例代码:

#include <fstream>
#include <iostream>

int main() {
    std::ifstream fin("input.txt"); // 打开输入文件
    std::ofstream fout("output.txt"); // 打开输出文件
    
    int n;
    while (fin >> n) { // 从输入文件读入整数并写入到输出文件
        fout << n << " ";
    }
    
    fin.close(); // 关闭输入文件
    fout.close(); // 关闭输出文件
    return 0;
}

C++的<iomanip>头文件格式化输入输出功能

<iomanip>头文件常用于控制标准输出流的格式,例如设置输出浮点数时的位数、调整对齐方式、设置填充字符等等。【https://en.cppreference.com/w/cpp/header/iomaniphttps://cplusplus.com/reference/iomanip/

包含的函数:

setiosflags:设置指定的格式标志,可以通过位或运算符(|)组合多个标志。

resetiosflags:重置指定的格式标志。

setbase:设置整数输出的进制基数,如二进制、十进制、八进制或十六进制。

setfill:设置填充字符,用于在字段宽度不足时填充空白位置。

setprecision:设置浮点数输出的小数点后的精度。

setw:设置字段的宽度,影响输出时各个字段之间的间距。

get_money:从输入流中获取一个货币值。

put_money:将一个货币值写入输出流。

get_time:从输入流中获取日期和时间。

put_time:将日期和时间写入输出流。

下面是示例程序:

#include <iostream>
#include <iomanip>  // 必须引入此头文件才能使用格式控制符

int main() {
    int i = 123;
    double d = 3.14159265359;
    std::string str = "Hello world!";

    // 设置输出浮点数精度为三位小数
    std::cout << std::fixed << std::setprecision(3);
    // 输出浮点数,如果小数位不足三位则自动补零
    std::cout << "d = " << d << std::endl;

    // 设置输出宽度为10个字符,不足则以0填充
    std::cout << std::setw(10) << std::setfill('0') << i << std::endl;

    // 设置输出宽度为20个字符,右对齐,左边用空格填充
    std::cout << std::setw(20) << std::left << str << std::endl;

    // 设置输出方式为科学计数法,保留五位小数
    std::cout << std::scientific << std::setprecision(5) << d << std::endl;

    return 0;
}

输出结果:

d = 3.142
0000000123
Hello world!
3.14159e+00

解释:

std::fixed和std::scientific用于控制输出浮点数的显示格式,分别代表固定小数点显示和科学计数法显示。

std::setprecision(n)用于设置浮点数精度,在fixed或scientific模式下,会控制小数点后保留的位数。

std::setw(n)和std::setfill(c)用于设置输出宽度和填充字符,宽度指定了输出数据的总位数,不足宽度的地方会自动用填充字符填充。必须同时使用这两个函数才能生效。

std::left和std::right用于设置输出对齐方式,左对齐和右对齐。默认是右对齐。

在 C++ 中,使用标准库提供的函数、变量和类型时,需要加上命名空间标识符 std::(其中“::”是命名空间限定符)。例如,要使用 std::cout 来输出信息。

使用 using namespace std; 在代码的开头声明引入了 std 命名空间。这样在后续的代码中就可以直接使用标准库的函数、变量和类型,而不需要再加上 std::。

引用标准名称空间,上例可改为:

#include <iostream>
#include <iomanip>  // 必须引入此头文件才能使用格式控制符
using namespace std; // 引用标准名称空间 

int main() {
    int i = 123;
    double d = 3.14159265359;
    string str = "Hello world!";

    // 设置输出浮点数精度为三位小数
    cout << fixed << setprecision(3);
    // 输出浮点数,如果小数位不足三位则自动补零
    cout << "d = " << d << endl;

    // 设置输出宽度为10个字符,不足则以0填充
    cout << setw(10) << setfill('0') << i << endl;

    // 设置输出宽度为20个字符,右对齐,左边用空格填充
    cout << setw(20) << left << str << endl;

    // 设置输出方式为科学计数法,保留五位小数
    cout << scientific << setprecision(5) << d << endl;

    return 0;
}

C++语言之输入输出深入介绍https://blog.csdn.net/cnds123/article/details/126358415

c++验证用户输入合法性的示例代码https://blog.csdn.net/cnds123/article/details/130322634

猜你喜欢

转载自blog.csdn.net/cnds123/article/details/132045856