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

时间:2023-02-11 07:44:46

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。


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