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

来源:互联网 发布:mac 无线上网卡 编辑:程序博客网 时间:2024/04/30 08:11

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。


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


0 0
原创粉丝点击