2016-10-06 94 views
0

我試圖在由字符串和整數的外部文件(.DAT)讀取,格式如下:如何存儲陣列中的字符串和整數用C

串1

串2

串3等

並存儲這些值代入單獨的陣列(一個陣列爲字符串,一個用於整數)。但是,我只能設法分配文件中的第一個整數,所有後續的整數和任何存在的字符串都不會被分配。這裏是我的這部分partiular代碼:

char string[20]; /*20 is used as a placeholder for the time being*/ 
int integer[20]; 
FILE *inp2; /*pointer to input file 2*/  
int file_succeed1 = fopen_s(&inp2,"C:\\Users\\input2b.dat", "r"); /*Boolean test*/ 
if (file_succeed1 != 0) 
{ 
    printf_s("There was an error opening the file \n"); 
    return 0; /*The file failed to be read, end of program.*/ 

} 



for(i = 0; i <=20; i++) 
{ 
    fscanf_s(inp2, "%s", &string[i], 20); 
    fscanf_s(inp2, "%d", &integer[i]); 
} 


fclose(inp2); /*close the input file*/ 

要打印的信息時,我得到的警告信息:

警告C4477:「printf」式:格式字符串「%s」的要求的參數鍵入「字符*」,但可變參數的參數1的類型爲「詮釋」

警告C4313:「printf的」:「%s」的格式字符串衝突與參數1類型「詮釋」

的我已經成功讀入和分配只包含整數的外部文件的值,如何在這種情況下,無法弄清楚如何分配字符串或隨後的整數。任何幫助非常感謝。謝謝。

注:我已明確建議不要使用多維數組,但平行數組是可以的。

+0

如果'printf'給你帶來錯誤,你爲什麼要貼一些不同的東西?另外:它應該是'fscanf_s(inp2,「%s」,string [i],20);'這會導致下一個問題:對於一個字符串只有一個緩衝區,您想如何保護其他字符串沒有更多的記憶?你可以不使用二維數組,但這會變得更加複雜。 – deamentiaemundi

回答

1

定義:

char string[20][20]; 

閱讀使用:

if (fscanf_s(inp2, "%s %d", string[i], 20, &integer[i]) != 2) 
    …report error and break loop… 

如果你要讀多達20個整數,你還需要20串,每個都需要一定的空間供多個字符。使用二維字符數組非常簡單,並且不需要您瞭解指針。建議的代碼將兩個獨立的呼叫替換爲fscanf_s(),其中一個完全有能力處理它。始終檢查I/O操作(尤其是輸入操作)是否成功。請注意,fscanf_s()可能會返回EOF或1(以及名義上0)以及2,但只有2表示成功。

相關問題