C语言的I/O编程(文件I/O与系统I/O)

C语言的I/O编程(文件I/O与系统I/O)

在C语言中,文件I/O和系统I/O是非常重要的概念,它们允许您在程序中读取和写入文件,以及与操作系统进行交互。文件I/O让您能够读取和写入文件,而系统I/O让您能够进行输入和输出操作。

1. 文件I/O操作

打开和关闭文件

在C语言中,要进行文件I/O操作,首先需要打开文件。可以使用fopen()函数来打开文件,并返回一个文件指针。文件指针将用于后续对文件进行操作。

下面是一个例子,演示如何打开和关闭文件:

#include <stdio.h>

int main() {
    FILE *file;

    // 打开文件
    file = fopen("example.txt", "r");

    if (file == NULL) {
        printf("无法打开文件.\n");
        return 1;
    }

    // 处理文件操作

    // 关闭文件
    fclose(file);

    return 0;
}

在上面的例子中,我们使用fopen()函数打开名为example.txt的文件。如果文件打开成功,fopen()函数将返回一个指向该文件的文件指针。如果文件无法打开,fopen()函数将返回NULL

使用fclose()函数可以关闭文件。关闭文件是一个好习惯,它确保在不再需要文件时释放系统资源。

读取和写入文件

打开文件之后,可以使用文件指针进行读取和写入操作。C语言提供了一组函数用于读取和写入文件,例如fprintf()用于写入数据,fscanf()用于读取数据。

下面是一个例子,演示如何从文件中读取数据并将数据写入文件:

#include <stdio.h>

int main() {
    FILE *file;
    int num;
    char text[50];

    // 打开文件以读取数据
    file = fopen("data.txt", "r");

    if (file == NULL) {
        printf("无法打开文件.\n");
        return 1;
    }

    // 从文件中读取数据
    fscanf(file, "%d", &num);
    fgets(text, 50, file);

    // 关闭文件
    fclose(file);

    // 打开文件以写入数据
    file = fopen("output.txt", "w");

    if (file == NULL) {
        printf("无法打开文件.\n");
        return 1;
    }

    // 将数据写入文件
    fprintf(file, "读取的数字是:%d\n", num);
    fprintf(file, "读取的文本是:%s", text);

    // 关闭文件
    fclose(file);

    return 0;
}

在上面的例子中,我们首先使用fopen()函数以读取模式打开名为data.txt的文件。然后,使用fscanf()函数和fgets()函数从文件中读取整数和文本。

接下来,我们使用fopen()函数以写入模式打开名为output.txt的文件。然后,使用fprintf()函数将读取的数据写入文件。

定位文件指针

文件指针可以用于定位文件中的特定位置。通过使用fseek()函数,可以将文件指针移动到文件的任意位置。这对于在文件中查找特定数据或进行随机读取和写入操作非常有用。

下面是一个例子,演示如何定位文件指针:

#include <stdio.h>

int main() {
    FILE *file;
    int num;

    // 打开文件以读取数据
    file = fopen("numbers.txt", "r");

    if (file == NULL) {
        printf("无法打开文件.\n");
        return 1;
    }

    // 定位文件指针到第三个数字的位置
    fseek(file, 2 * sizeof(int), SEEK_SET);

    // 读取文件中的数字
    fscanf(file, "%d", &num);

    printf("第三个数字是:%d\n", num);

    // 关闭文件
    fclose(file);

    return 0;
}

在上面的例子中,我们首先使用fopen()函数以读取模式打开名为numbers.txt的文件。然后,使用fseek()函数将文件指针定位到第三个数字的位置。

接下来,使用fscanf()函数从文件中读取该数字,并使用printf()函数在屏幕上打印它。

2. 系统I/O操作

标准输入和输出

C语言提供了三个标准流,即stdin(标准输入)、stdout(标准输出)和stderr(错误输出)。它们分别用于读取用户输入、打印输出和输出错误消息。

以下是一个例子,演示如何使用标准输入和输出:

#include <stdio.h>

int main() {
    int num;

    printf("请输入一个数字:");
    scanf("%d", &num);

    printf("您输入的数字是:%d\n", num);

    fprintf(stderr, "发生错误!\n");

    return 0;
}

在上面的例子中,我们使用printf()函数打印一条提示用户输入的消息,并使用scanf()函数获取用户输入的数字。然后,使用printf()函数将输入的数字打印到屏幕上。

我们还使用了fprintf()函数将错误消息打印到stderr流中,它会导致错误消息显示在控制台上。

错误流

stderr流是C语言中的错误输出流。它用于打印程序中的错误消息。使用fprintf(stderr, ...)函数可以将错误消息打印到stderr流。

下面是一个示例,演示如何使用stderr流输出错误消息:

#include <stdio.h>

int main() {
    int num;

    printf("请输入一个数字:");
    scanf("%d", &num);

    if (num < 0) {
        fprintf(stderr, "错误:数字必须大于等于0!\n");
        return 1;
    }

    printf("您输入的数字是:%d\n", num);

    return 0;
}

在上面的例子中,我们首先使用printf()函数打印一条提示用户输入的消息,并使用scanf()函数获取用户输入的数字。

然后,我们使用了一个条件语句来检查输入的数字是否小于0。如果是小于0,我们使用fprintf()函数将错误消息打印到stderr流,并返回1表示程序发生错误。

重定向输入和输出

在C语言中,可以使用重定向输入和输出来更改程序的标准输入和输出流。重定向将允许程序从文件中读取输入,或将输出保存到文件中,而不是在控制台上进行输入和输出。

下面是一个示例,演示如何使用重定向输入和输出:

#include <stdio.h>

int main() {
    int num1, num2, sum;

    // 从文件中读取输入
    freopen("input.txt", "r", stdin);
    scanf("%d %d", &num1, &num2);

    // 将输出保存到文件
    freopen("output.txt", "w", stdout);
    sum = num1 + num2;
    printf("两个数的和为:%d\n", sum);

    return 0;
}

在上面的例子中,我们使用freopen()函数将标准输入流重定向到名为input.txt的文件,然后使用scanf()函数从该文件中读取输入。

接下来,我们使用freopen()函数将标准输出流重定向到名为output.txt的文件,并使用printf()函数将输出保存到该文件中。

通过使用重定向输入和输出,您可以更灵活地处理不同来源和目标的输入和输出。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值