2016-09-26 36 views
0

繼承人到目前爲止我的代碼,基本上我閱讀的文本文件,並試圖通過線路輸入的每一行保存到一個字符數組。文本文件被正確讀取並保存到一個字符數組,然後我遍歷並嘗試將數字保存到int錯誤分析從文本文件c INT

*這是不是整個代碼塊,因爲它是我的工作分配。提供的當前代碼僅用於調試目的。

//takes input of file, saves it to array 
char word[20]; 
scanf("%s", word); 

//File to open 
char line[10]; 
char number[10]; 

FILE *file; 
file = fopen(word, "r"); 

if (file) { 
    while (fgets(line, sizeof(line), file)) { 
    printf("%s", line); 
    int i,j=0; 
    int parsedInt; 

    for(i=2; i<sizeof(line) && !isspace(line[i]); i++) 
    { 
     number[j] = line[i]; 
     j++; 
    } 
    sscanf(number, "%d", &parsedInt); 
    printf("PARSED INT %d \n\n", parsedInt); 
    parsedInt = 0; 

下面是一個示例輸入文件,我已經處理了id,工作正常。

i 10 
i 12 
d 10 
i 3 

和繼承人與這些數字

i 10 
PARSED INT 10 

i 12 
PARSED INT 12 

d 10 
PARSED INT 10 

i 3 
PARSED INT 32 

樣本輸出一個人能解釋爲什麼上次輸入給出了一個32而不是3中,而另一些得當?

+0

'for(i = 2; i

+0

'number'需要空值終止 – BLUEPIXY

+0

如果您解析只有一個字符線什麼'I = * 2 *;?I <的sizeof(線)&& isspace爲(行* [I] *);!?'你會讀到。壞數據 – LoztInSpace

回答

0

因爲我們沒有看到的一切,我會採取一種猜測,你沒有投入值之前清除數值列,所以scanf()的即將過去的實際輸入。在for循環之後放置一個'\ 0',或者在使用之前使用memset()或類似的方法清除數組。所以像:

memset(number, 0, sizeof(number)); 
for(i=2; i<sizeof(line) && !isspace(line[i]); i++) { 
    number[j] = line[i]; 
    j++; 
} 

這假定'\ 0'== 0(這是一個該死的安全假設輸入法)。

+0

感謝這爲我工作。 – yugantjoshi