2012-11-07 37 views
3

我有一個文件有幾行10個整數。使用fscanf()將整數複製到數組中。在C

我想這些整數複製到多個陣列,命名爲第1行,第2行,第3行等在相應的陣列從各行號。

我目前使用

fscanf(items, "%d, %d, %d, %d, %d, %d, %d, %d, %d, %d", &line1[0], &line1[1], &line1[2], &line1[3], &line1[4], &line1[5], &line1[6], &line1[7], &line1[8], &line1[9]); 

分配第一10個整數到名爲LINE1陣列。

這是做一個非常草率的方式,它不應對值的其餘部分分配給其他陣列的其他問題。

關於如何10個值更加整齊分配給數組,以及如何將每行分配給一個不同的陣列的任何建議,將不勝感激!

謝謝

+0

是否有可能行並不總是包含10'int'值? – hmjd

回答

5

使用多維數組和嵌套循環:

#DEFINE COLS 10 
#DEFINE ROWS 10 

int i, j; 
int line[ROWS][COLS]; 

for (i = 0; i < ROWS; ++i) { 
    for (j = 0; i < COLS - 1; ++j) { 
    fscanf(items, "%d, ", &line[i][j]); 
    } 
    fscanf(items, "%d", &line[i][COLS - 1]); 
} 

編輯:

上面的代碼使用相同的格式字符串作爲問題(逗號分隔值)。 如果空間分隔值都OK,你可以在每行使用直線迴路中無需單獨fscanf的最後一個項目:

#DEFINE COLS 10 
#DEFINE ROWS 10 

int i, j; 
int line[ROWS][COLS]; 

for (i = 0; i < ROWS; ++i) { 
    for (j = 0; i < COLS; ++j) { 
    fscanf(items, "%d", &line[i][j]); 
    } 
} 

旁註:

如果你想寫一個檢測到錯誤代碼在輸入文件中,您需要檢查fscanf的返回值。在學校項目中可能不需要,但在工業強度代碼中需要。

+0

爲什麼第二個scanf? – iabdalkader

+1

由於該行的最後一位數字後面不會有逗號 – asbumste

+1

您剛剛忘記了'fscanf'的第一個參數。 ;-) – md5

1

您需要使用循環。

#include <stdio.h> 

for (size_t i = 0; i < 9; ++i) 
    fscanf("%d, ", &line1[i]); 
fscanf("%d", &line[9]); 

擁有雙維數組會更好。

int a[NLINES][NCOLUMNS]; 

for (size_t i = 0; i < NLINES; ++i) { 
    for (size_t j = 0; j < NCOLUMNS - 1; ++j) 
     fscanf(fp, "%d, ", &a[i][j]); 
    fscanf(fp, "%d\n", &a[i][NCOLUMNS - 1]); 
} 
+0

媽的,解釋downvote ... – md5

+0

最後一行是錯誤的 – iabdalkader

+0

好了,你可以發表評論,而不是downvote一個錯字... – md5

3

如果你知道你有多少行有,比如說100,你可以只:

int arr[r][c]; 

for (i=0; i<r; i++) { 
    for (j=0; j<c-1; j++) { 
     fscanf(file, "%d, ", &arr[i][j]); 
    } 
    fscanf(file, "%d\n", &arr[i][j]); 
} 
+0

+1儘管如此,即使他不知道確切的大小(C99可變長度數組<危險的stackoveflow>或動態分配),他仍然可以使用它 但是,同意 – Fingolfin

+0

@AdelQodmani對,但我通常不喜歡複雜的答案,除非它真的需要,謝謝:) – iabdalkader

+0

+1現在正確,你添加逗號和額外的fscanf – asbumste

相關問題