2014-08-29 40 views
-2

我正在寫一個程序,它應該做許多事情,包括提示用戶輸入我已經完成的文件的名稱,但是我遇到了一個麻煩的問題,從一個文件的每一行,將它存儲爲一個結構數據結構,最後使用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號是「源」,然後「目的地等等

+0

這是你的功課嗎? – Igor 2014-08-29 08:03:06

+0

使用'char * fgets(DataLine,70,(FILE)* DataFile)調用'fgets';'看起來不奇怪?因爲它不應該編譯,所以發佈了代碼 – 2014-08-29 08:11:06

+0

。 – 2014-08-29 08:12:59

回答

1

一種方式來做到這一點。

  • 使用fgets逐行讀取文件。
  • 對於每一行,使用strtok來標記字符串。
  • 對於前四個標記中的每一個,使用strtol將其轉換爲整數。
0

A.線char *fgets(DataLine, 70, (FILE) *DataFile);或許應該只是讀fgets(DataLine, 70, DataFile);

B.如果你創建一個單一的變量,你真的不需要malloc因爲編譯器將分配它,但如果你正在計劃創建數據數組你只需要調用malloc一次以創建整個陣列,是這樣的:

struct packet* packetarr = malloc(sizeof packetarr * DESIRED_ARRAY_SIZE); 

C.作爲downHillFromHere建議,使用strtok得到的字符串和的每一部分210在適當時將讀取的字符串轉換爲數字。

相關問題