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

Posted 小威威__

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。


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


以上是关于C语言:从文本文件中读取输入数据的主要内容,如果未能解决你的问题,请参考以下文章

c语言 如何读取中文字符串

C语言 怎么读取文件的每一行的内容

如何将在c语言中生成的数据保存到文本文件中?

C语言,程序读取标准输入是啥意思?

C语言文件的文本怎么读取?

用C语言读出文件行数