c/c++输入和输出标准库stdio和iostream介绍

介绍

在 c 和 c++语言中,对输入和输出提供了标准库函数来进行操作,下面介绍一些常用的标准库函数的使用。

c 语言的stdio.h

在C语言中,stdio.h是标准库的头文件之一,提供了输入和输出操作的函数和宏定义。它包含了一些常用的函数,用于读取和写入数据到标准输入输出设备(例如键盘和屏幕)或文件中。

输入输出函数

  • printf:格式化输出函数,用于将格式化的数据输出到标准输出设备(屏幕)
int printf(const char *format, ...);
/*
format是一个格式控制字符串,用于指定输出的格式。
...表示可变参数列表,用于传递要输出的数据。
*/

printf函数根据格式控制字符串中的格式说明符来决定如何输出数据。下面是一些常见的格式说明符:

格式符 说明
%d 输出带符号的十进制整数
%f 输出浮点数
%c 输出单个字符
%s 输出字符串
%p 输出指针地址
%x/%X 输出带符号的十六进制整数
#include <stdio.h>

int main() {
    int age = 25;
    float height = 1.75;
    char grade = 'A';
    char name[] = "John";

    printf("Name: %s\n", name);
    printf("Age: %d\n", age);
    printf("Height: %.2f\n", height);
    printf("Grade: %c\n", grade);

    return 0;
}
/* 输出结果:
Name: John
Age: 25
Height: 1.75
Grade: A
*/
  • scanf:格式化输入函数,用于从标准输入设备(键盘)读取格式化的数据。
int scanf(const char *format, ...);
/*
format是一个格式控制字符串,用于指定输入的格式。
...表示可变参数列表,用于传递要读取的数据的地址。
*/

scanf函数根据格式控制字符串中的格式说明符来决定如何读取输入数据,并将数据存储到相应的变量中。下面是一些常见的格式说明符:

格式符 说明
%d 读取带符号的十进制整数
%f 读取浮点数
%c 读取单个字符
%s 读取字符串
%p 读取指针地址
%x/%X 读取带符号的十六进制整数
#include <stdio.h>

int main() {
    int age;
    float height;
    char grade;
    char name[100];

    printf("Enter your name: ");
    scanf("%s", name);

    printf("Enter your age: ");
    scanf("%d", &age);

    printf("Enter your height: ");
    scanf("%f", &height);

    printf("Enter your grade: ");
    scanf(" %c", &grade);

    printf("Name: %s\n", name);
    printf("Age: %d\n", age);
    printf("Height: %.2f\n", height);
    printf("Grade: %c\n", grade);

    return 0;
}
  • fprintf:格式化输出函数,用于将格式化的数据输出到文件
int fprintf(FILE *stream, const char *format, ...);
/*
stream是一个指向FILE类型结构体的指针,用于表示要输出的文件。
format是一个格式控制字符串,用于指定输出的格式。
...表示可变参数列表,用于传递要输出的数据。
*/

fprintf函数根据格式控制字符串中的格式说明符来决定如何输出数据到文件。下面是一些常见的格式说明符:

格式符 说明
%d 输出带符号的十进制整数
%f 输出浮点数
%c 输出单个字符
%s 输出字符串
%p 输出指针地址
%x/%X 输出带符号的十六进制整数
#include <stdio.h>

int main() {
    FILE *file;
    file = fopen("output.txt", "w");  // 打开文件以供写入

    int age = 25;
    float height = 1.75;
    char grade = 'A';
    char name[] = "John";

    fprintf(file, "Name: %s\n", name);
    fprintf(file, "Age: %d\n", age);
    fprintf(file, "Height: %.2f\n", height);
    fprintf(file, "Grade: %c\n", grade);

    fclose(file);  // 关闭文件

    return 0;
}
  • fscanf:格式化输入函数,用于从文件读取格式化的数据。
int fscanf(FILE *stream, const char *format, ...);
/*
stream是一个指向FILE类型结构体的指针,用于表示要从中读取数据的文件。
format是一个格式控制字符串,用于指定输入的格式。
...表示可变参数列表,用于传递要读取的数据的地址。
*/

fscanf函数根据格式控制字符串中的格式说明符来决定如何从文件中读取输入数据,并将数据存储到相应的变量中。下面是一些常见的格式说明符:

格式符 说明
%d 读取带符号的十进制整数
%f 读取浮点数
%c 读取单个字符
%s 读取字符串
%p 读取指针地址
%x/%X 读取带符号的十六进制整数
#include <stdio.h>

int main() {
    FILE *file;
    file = fopen("input.txt", "r");  // 打开文件以供读取

    int age;
    float height;
    char grade;
    char name[100];

    fscanf(file, "%s", name);
    fscanf(file, "%d", &age);
    fscanf(file, "%f", &height);
    fscanf(file, " %c", &grade);

    printf("Name: %s\n", name);
    printf("Age: %d\n", age);
    printf("Height: %.2f\n", height);
    printf("Grade: %c\n", grade);

    fclose(file);  // 关闭文件

    return 0;
}

在上面的示例中,通过调用fopen函数打开一个文件,使用"r"模式指定以读取方式打开文件。然后,使用fscanf函数从文件中读取格式化的数据,并将其存储到相应的变量中。最后,使用printf函数将读取到的数据输出到屏幕上。最后,通过调用fclose函数关闭文件。

  • sprintf:格式化输出函数,将格式化的数据输出到字符串缓冲区中。
int sprintf(char *str, const char *format, ...);
/*
str是一个指向字符数组的指针,用于表示输出的字符串。
format是一个格式控制字符串,用于指定输出的格式。
...表示可变参数列表,用于传递要输出的数据。
*/

sprintf函数根据格式控制字符串中的格式说明符来决定如何输出数据到字符串中。下面是一些常见的格式说明符:

格式符 说明
%d 输出带符号的十进制整数
%f 输出浮点数
%c 输出单个字符
%s 输出字符串
%p 输出指针地址
%x/%X 输出带符号的十六进制整数
#include <stdio.h>

int main() {
    char str[100];
    int age = 25;
    float height = 1.75;
    char grade = 'A';
    char name[] = "John";

    sprintf(str, "Name: %s, Age: %d, Height: %.2f, Grade: %c", name, age, height, grade);
    printf("Formatted string: %s\n", str);

    return 0;
}

在上面的示例中,使用sprintf函数将格式化的数据输出到字符串str中。通过将要输出的数据和格式控制字符串作为参数传递给sprintf函数,可以将格式化的数据存储到指定的字符串中。

  • sscanf:格式化输入函数,从字符串中读取格式化的数据。
int sscanf(const char *str, const char *format, ...);
/*
str是一个指向输入字符串的指针,用于表示要从中读取数据的字符串。
format是一个格式控制字符串,用于指定输入的格式。
...表示可变参数列表,用于传递要读取的数据的地址。
*/

sscanf函数根据格式控制字符串中的格式说明符来决定如何从字符串中读取输入数据,并将数据存储到相应的变量中。下面是一些常见的格式说明符:

格式符 说明
%d 读取带符号的十进制整数
%f 读取浮点数
%c 读取单个字符
%s 读取字符串
%p 读取指针地址
%x/%X 读取带符号的十六进制整数
#include <stdio.h>

int main() {
    char data[] = "John 25 1.75 A";
    char name[100];
    int age;
    float height;
    char grade;

    sscanf(data, "%s %d %f %c", name, &age, &height, &grade);

    printf("Name: %s\n", name);
    printf("Age: %d\n", age);
    printf("Height: %.2f\n", height);
    printf("Grade: %c\n", grade);

    return 0;
}

在上面的示例中,使用sscanf函数从字符串data中读取格式化的数据,并将其存储到相应的变量中。通过将要读取的数据和格式控制字符串作为参数传递给sscanf函数,可以从指定的字符串中提取格式化的数据。

文件操作函数

  • fopen:打开文件函数,用于打开文件并返回一个文件指针。
FILE *fopen(const char *filename, const char *mode);
/*
filename是一个字符串,表示要打开的文件的名称或路径。
mode是一个字符串,表示打开文件的模式,用于指定文件的读写方式。
*/

fopen函数返回一个指向FILE类型的指针,该指针指向打开的文件。如果文件打开成功,则返回的指针非空;否则返回空指针。

打开模式 解释说明
r 以只读方式打开文件。文件必须存在,否则打开失败
w 以写入方式打开文件。如果文件存在,则会被截断为空文件;如果文件不存在,则会创建一个新文件
a 以追加方式打开文件。如果文件存在,则写入的数据会追加到文件末尾;如果文件不存在,则会创建一个新文件
r+ 以读写方式打开文件。文件必须存在,读写操作都可以进行
w+ 以读写方式打开文件。如果文件存在,则会被截断为空文件;如果文件不存在,则会创建一个新文件
a+ 以读写方式打开文件。如果文件存在,则写入的数据会追加到文件末尾;如果文件不存在,则会创建一个新文件
#include <stdio.h>

int main() {
    FILE *file;
    char *filename = "example.txt";

    // 打开文件以进行写入
    file = fopen(filename, "w");
    if (file == NULL) {
        printf("无法打开文件 %s\n", filename);
        return 1;
    }

    // 写入数据到文件
    fprintf(file, "这是一个示例文本。\n");
    fprintf(file, "Hello, World!\n");

    // 关闭文件
    fclose(file);

    return 0;
}
  • fclose:关闭文件函数,用于关闭已打开的文件。
int fclose(FILE *stream);
//stream 是一个指向 FILE 类型的指针,表示要关闭的文件。
#include <stdio.h>

int main() {
    FILE *file;
    char *filename = "example.txt";

    // 打开文件以进行写入
    file = fopen(filename, "w");
    if (file == NULL) {
        printf("无法打开文件 %s\n", filename);
        return 1;
    }

    // 写入数据到文件
    fprintf(file, "这是一个示例文本。\n");
    fprintf(file, "Hello, World!\n");

    // 关闭文件
    int result = fclose(file);
    if (result == EOF) {
        printf("关闭文件失败。\n");
        return 1;
    }

    return 0;
}
  • fread:从文件中读取数据函数。
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
/*
ptr 是一个指向要存储读取数据的内存区域的指针。
size 是要读取的每个数据项的大小(以字节为单位)。
count 是要读取的数据项的数量。
stream 是要从中读取数据的文件指针。
*/
#include <stdio.h>

int main() {
    FILE *file;
    char *filename = "example.txt";
    char buffer[100];

    // 打开文件以进行读取
    file = fopen(filename, "r");
    if (file == NULL) {
        printf("无法打开文件 %s\n", filename);
        return 1;
    }

    // 从文件中读取数据
    size_t items_read = fread(buffer, sizeof(char), sizeof(buffer) - 1, file);
    if (items_read == 0) {
        printf("读取文件失败。\n");
        return 1;
    }

    // 在读取的数据末尾添加字符串结束符
    buffer[items_read] = '\0';

    // 输出读取的数据
    printf("读取的数据:\n%s\n", buffer);

    // 关闭文件
    fclose(file);

    return 0;
}
  • fwrite:向文件中写入数据函数。
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
/*
ptr 是一个指向要写入文件的数据的指针。
size 是每个数据项的大小(以字节为单位)。
count 是要写入的数据项的数量。
stream 是要写入数据的文件指针。
*/

fwrite 函数会将指定内存区域中的数据写入到文件中。它返回实际成功写入的数据项数量,或者在出错时返回一个小于 count 的值。

#include <stdio.h>

int main() {
    FILE *file;
    char *filename = "example.txt";
    char data[] = "Hello, World!";

    // 打开文件以进行写入
    file = fopen(filename, "w");
    if (file == NULL) {
        printf("无法打开文件 %s\n", filename);
        return 1;
    }

    // 将数据写入文件
    size_t items_written = fwrite(data, sizeof(char), sizeof(data) - 1, file);
    if (items_written == 0) {
        printf("写入文件失败。\n");
        return 1;
    }

    // 关闭文件
    fclose(file);

    return 0;
}
  • fgets:从文件中读取字符串函数。
char *fgets(char *str, int n, FILE *stream);
/*
str 是一个指向字符数组(字符串)的指针,用于存储读取的数据。
n 指定最大要读取的字符数(包括空字符)。
stream 是文件指针或标准输入流(stdin),从中读取字符串。
*/

fgets函数从指定的输入流中读取一行文本,并将其存储在提供的字符数组中。它最多读取 n-1 个字符,或者遇到换行符('\n')时停止读取,以保证结果字符串以空字符结尾。

#include <stdio.h>

int main() {
    char input[100];

    printf("请输入一行文本:");
    fgets(input, sizeof(input), stdin);

    printf("您输入的文本为:%s", input);

    return 0;
}
  • fputs:向文件中写入字符串函数。
int fputs(const char *str, FILE *stream);
/*
str 是要写入的字符串。
stream 是文件指针或标准输出流(stdout),将字符串写入其中。
*/

fputs函数将指定的字符串写入到指定的输出流中。它返回一个非负值(非负整数)表示成功,或者返回EOF(-1)表示出错。

#include <stdio.h>

int main() {
    FILE *file;
    char *filename = "output.txt";
    char *text = "Hello, World!";

    // 打开文件以进行写入
    file = fopen(filename, "w");
    if (file == NULL) {
        printf("无法打开文件 %s\n", filename);
        return 1;
    }

    // 将字符串写入文件
    int result = fputs(text, file);
    if (result == EOF) {
        printf("写入文件失败。\n");
        return 1;
    }

    // 关闭文件
    fclose(file);

    return 0;
}

字符输入输出函数

  • getchar:从标准输入设备(键盘)读取一个字符。
  • putchar:向标准输出设备(屏幕)写入一个字符。
  • gets:从标准输入设备(键盘)读取一行字符串。
  • puts:向标准输出设备(屏幕)写入一行字符串。

错误处理函数

  • perror:打印错误信息函数。
  • ferror:检查文件错误函数。
  • clearerr:清除文件错误标志函数。

文件定位函数

  • fseek:设置文件位置函数。
int fseek(FILE *stream, long offset, int origin);
/*
stream 是文件指针,用于指定要操作的文件。
offset 是要设置的偏移量,即要移动的字节数。
origin 是起始位置,用于确定偏移量的参考点。它可以是以下常量之一:
	SEEK_SET:从文件开头开始计算偏移量。
	SEEK_CUR:从当前文件位置开始计算偏移量。
	SEEK_END:从文件末尾开始计算偏移量。
*/

fseek 函数用于将文件指针定位到指定位置。它可用于在文件中进行随机访问或重新定位文件指针。

#include <stdio.h>

int main() {
    FILE *file;
    char *filename = "example.txt";
    char buffer[100];

    // 打开文件以进行读取
    file = fopen(filename, "r");
    if (file == NULL) {
        printf("无法打开文件 %s\n", filename);
        return 1;
    }

    // 将文件指针定位到文件开头
    fseek(file, 0, SEEK_SET);

    // 读取文件内容
    fgets(buffer, sizeof(buffer), file);
    printf("文件内容:%s", buffer);

    // 关闭文件
    fclose(file);

    return 0;
}
  • ftell:获取当前文件位置函数。
long ftell(FILE *stream);
//stream 是文件指针,用于指定要获取位置的文件。

ftell 函数返回一个 long 类型的值,表示文件指针的当前位置相对于文件开头的偏移量(以字节为单位)。

#include <stdio.h>

int main() {
    FILE *file;
    char *filename = "example.txt";

    // 打开文件以进行读取
    file = fopen(filename, "r");
    if (file == NULL) {
        printf("无法打开文件 %s\n", filename);
        return 1;
    }

    // 获取文件指针的当前位置
    long position = ftell(file);
    printf("文件指针的当前位置:%ld\n", position);

    // 关闭文件
    fclose(file);

    return 0;
}

c++的iostream

在C++中,iostream是一个标准库,用于输入和输出流的操作。它包含了一组类和函数,用于处理输入和输出操作,包括从标准输入设备(键盘)读取数据,向标准输出设备(屏幕)输出数据,以及与文件和其他数据流的交互。

  • iostream库包括以下头文件:
#include <iostream>
  • iostream库提供了三个主要的流对象:
    cin:用于从标准输入(键盘)读取数据。
    cout:用于向标准输出(屏幕)输出数据。
    cerr:用于输出错误消息到标准错误设备(通常是屏幕)。
  • 示例
#include <iostream>

int main() {
    int age;
    float height;
    char grade;
    std::string name;

    std::cout << "Enter your name: ";
    std::getline(std::cin, name);

    std::cout << "Enter your age: ";
    std::cin >> age;

    std::cout << "Enter your height: ";
    std::cin >> height;

    std::cout << "Enter your grade: ";
    std::cin >> grade;

    std::cout << "Name: " << name << std::endl;
    std::cout << "Age: " << age << std::endl;
    std::cout << "Height: " << height << std::endl;
    std::cout << "Grade: " << grade << std::endl;

    return 0;
}

- iostream 库还提供了其他功能,如文件输入输出(使用 std::ifstream std::ofstream 类)、格式化输出(使用 std::setwstd::setprecision 等函数)等。

相关推荐

  1. c/c++输入输出标准stdioiostream介绍

    2024-03-12 08:12:04       20 阅读
  2. c++学习:iostream输入输出+错误流+标准日志流

    2024-03-12 08:12:04       35 阅读
  3. C++标准输入输出名字空间

    2024-03-12 08:12:04       25 阅读
  4. 【CSP考点回顾】C++标准加速输入输出

    2024-03-12 08:12:04       22 阅读
  5. [CLS] 输出向量 [MASK] 向量

    2024-03-12 08:12:04       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-12 08:12:04       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-12 08:12:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-12 08:12:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-12 08:12:04       18 阅读

热门阅读

  1. 数据库学习案例20240311 -mysql xtrabackup 备份与恢复

    2024-03-12 08:12:04       19 阅读
  2. 使用VScode避坑指南

    2024-03-12 08:12:04       27 阅读
  3. 如何通过Python代码连接OceanBase Oracle租户

    2024-03-12 08:12:04       20 阅读
  4. Python学习笔记之列表

    2024-03-12 08:12:04       21 阅读
  5. 20240311按键输入实验

    2024-03-12 08:12:04       18 阅读
  6. 使用协程库httpx并发请求

    2024-03-12 08:12:04       18 阅读