我正在编写一个程序,该程序应该执行多项操作,包括提示用户输入已完成的输入文件的名称,但是我在实现一个麻烦的过程,该程序处理文件中的每一行,并将其存储为结构数据结构,最后使用malloc,calloc命令,它将所有有效记录存储在要验证的内存中。因此,有关如何执行此操作的任何帮助都将有所帮助。

#include <stdio.h>          //library including standard input and output functions
#include <stdlib.h>         //library including exit and system functions used below
#include <string.h>         //library including string functions used

struct packet{
    int source;
    int destination;
    int type;               // Varibles for the structure
    int port;
    char data[50];
    char * filename;
};

int main ()
{
    printf("**************Details*******************************\n");
    printf("*****Student name: ***********************\n");
    printf("*****Course name: *******\n");
    printf("*****Student ID:  ************************ \n");
    printf("\n");

    // The program must prompt for the name of the input file. If it doesn't exist the program should stop with an error message


    FILE *DataFile;
    char filename[10] = { '\0' } ;
    char DataLine[70];

    printf("Enter the filename you wish to open\n");
    scanf("%s", &filename);

    if (( DataFile = fopen(filename, "r")) == NULL)
    {
        printf ("*****file could not be opened. : %s\n", filename);
        exit(1);
    }
    // Read the data from this file

    char *fgets(DataLine, 70, (FILE) *DataFile);

    system("pause");
    return 0;
}


这是程序应从中获取数据的文本文件

0001:0002:0003:0021:CLS
0001:0010:0003:0021:CLS
0001:0002:0002:0080:<HTML>
0005:0002:0002:8080:<BR>
0005:0012:0002:8080:<BR>
0001:0002:0002:0080:<BODY>
0005:0002:0002:8080:<B>HELLO</B><BR>
0002:0004:0002:0090:100000000000000000022
0001:0002:0003:0021:DEL
0002:0004:0002:0010:100000000000000000023


文件中的每个冒号都表明它应该属于数据包结构的哪一部分,即,第一个4个数字集是“源”,然后是“目的地”,依此类推。

最佳答案

一种方法是:


使用fgets逐行读取文件。
对于每一行,使用strtok标记字符串。
对于前四个标记中的每个标记,使用strtol将其转换为整数。

关于c - 处理要存储为结构的每一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25563879/

10-11 21:47