我有一项作业要求我编辑提供给我的C程序,以便它可以从文本文档中读取每行的内容:
int%char%char%Double%int%int%int
在文件末尾有任意数量的行和空行。
此文本文件将传递给此程序:
#include <stdlib.h>
#include <stdio.h>
struct node{
int element;
struct node * next;
};
// node structure
struct node * head = NULL; // head node
void add_node(int num) {
if (head == NULL){
head = (struct node *) malloc(sizeof(struct node));
head->element = num;
}
else{
struct node * p = head;
while(p->next != NULL)
p = p->next;
p->next = (struct node *) malloc(sizeof(struct node));
p->next->element = num;
}
}
void print_list() {
struct node * p = head;
while(p != NULL){
printf("%d ", p->element);
p = p->next;
}
}
void free_list() {
struct node * p = head;
while(head != NULL){
p = head->next;
free(head);
head = p;
}
}
int main(int argc, char const *argv[]) {
int n, i;
for (i = 0; i < 10; i++) {
scanf("%d", &n);
add_node(n);
}
print_list();
free_list();
return 0;
}
我需要编辑此程序,以在结构节点中包含文件中的7个字段(ID,类别,详细信息,金额,年,月,日)。然后从文本文件中读取(现在是File_name.txt)在struct节点中添加没有%分隔符的字段,然后按顺序打印出来(RecordID:(ID)类别:(类别)金额:$(金额)日期:(月) - (日) - (年)详细信息:(详细))并在程序终止前释放所有指针。我不希望你们都为我做任务,只是因为我不知道C编程是如何工作的,我需要这样做,所以如果有人能帮助指出我正确的方向如何去做这个非常感谢。
答案 0 :(得分:0)
从我看到的。
您必须使用文件中的指定变量创建自己的结构。
阅读每一行并智能地解析它们......函数 strtok 应该可以在C中执行此操作。
使用一个不应该写得太难的函数提取变量以存储在创建的结构中
其余的你可以或应该能够照顾
这可能没有你希望的那么有用,你可以试着让我理解,这样我可以帮助做得更好
答案 1 :(得分:0)
这应该让你开始走正确的道路:
int main(int argc, char const *argv[]) {
char filename[100];
printf("Enter the name of the file: ");
/*stdin is a FILE pointer to standard input */
fgets(filename, 100, stdin);
/*Now you open the file for reading "r" means read mode*/
FILE *fp = fopen(filename, "r");
/*Basic error checking*/
if (!fp) {
perror("File opening failed");
return EXIT_FAILURE; /*This is macro defined in stdlib.h*/
}
int id, year, month, day;
char category, detail;
double amt;
/* Here the fun begins. Use fscanf*/
while(fscanf(fp, "ID(%d)%%Category(%c)%%Detail(%c)%%Amount(%lf)%%Year(%d)%%Month(%d)%%Day(%d)",
&id, &category, &detail, &amt, &year, &month, &day) == 7) {
/* Do what ever you want with those values - create a node or something*/
}
/* Finally close the file */
fclose(fp);
return 0;
}
请记住,每次循环时,变量都会发生变化。