C语言:从文本文件中读取输入数据

C语言:从文本文件中读取输入数据

标签: C语言 文本文件 输入数据

by 小威威


我们经常通过输入测试数据来调试我们程序:一般都是直接运行程序然后再人为的输入。这样做其实是非常笨的,尤其是在测试数据较多的情况下。因此,我们就想能不能将测试数据进行复制直接输入到程序中?

显然是有这种方法的。首先,我们将输入数据复制粘贴到一个新的txt文档中,然后通过程序读取文本文档中的测试数据来实现数据的输入。

这里就涉及到了fopenfclosefscanffprintf
fopen就是在程序中打开文件,其原理就是将储存在硬盘中的文件放到内存中运行。
fclose就是在程序中关闭文件,其原理就是将内存中运行的这个文件退出。
fscanf就是将文件中的内容读入到程序中。
fprintf就是将程序中的内容输入到另一个文件中存储起来。

下面放代码:(以我以前的代码为例利用排序二叉树进行排序

/*main.c*/
#include<stdio.h>
#include<stdlib.h>
#include"tree.h"

int main(void) {
    int node_num, i = 0, temp;
    Node *root = NULL;
    FILE *fp1;
    fp1 = fopen("1.txt", "r");
    fscanf(fp1, "%d", &node_num);
    while (i < node_num) {
        fscanf(fp1, "%d", &temp);
        if (i == 0) root = init_root(temp);
        else insert_node(root, temp);
        i++;
    }
    traverse_tree_inorder(root);
    printf("\n");
    recycle_nodes(root);
    fclose(fp1);
    return 0;
}
/*tree.h*/
# include <stdlib.h>
# include <stdio.h>
typedef struct Node {
    struct Node *left;
    struct Node *right;
    int value;
} Node;
Node* init_root(int value) {
    Node *root;
    root = malloc(sizeof(Node));
    root->value = value;
    root->left = NULL;
    root->right = NULL;
    return root;
}

void insert_node(Node *p, int value) {
    Node *pArr;
    pArr = malloc(sizeof(Node));
    pArr->value = value;
    pArr->left = NULL;
    pArr->right = NULL;
    while (p->left != pArr && p->right != pArr) {
        while (value > p->value) {
            if (p->right == NULL) {
                p->right = pArr;
                return;
            } else {
                p = p->right;
            }
        }
        while (value < p->value) {
            if (p->left == NULL) {
                p->left = pArr;
                return;
            } else {
                p = p->left;
            }
        }
    }
    return;
}
void traverse_tree_inorder(Node *p) {
    if (p == NULL)
        return;
    traverse_tree_inorder(p->left);
    printf("%d ", p->value);
    traverse_tree_inorder(p->right);
}
void recycle_nodes(Node *p) {
    if (p == NULL)
        return;
    recycle_nodes(p->left);
    recycle_nodes(p->right);
    free(p);
}
/*1.txt*/
5 23 2 3 333 35

/*输出结果*/
2 3 23 35 333

这样我们就能将测试样例复制粘贴到txt中,然后通过程序读取,这样也就避免了人为输入所带来的差错,也节省了时间。当我们要将代码提交上去时,只需将代码中的FILE指针,fopen, fclose删除,将fscanf改为scanf,将fprintf改为printf。


以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值