2017-02-23 49 views
0

的文件,我不知道爲什麼我不知道這一點,但我想讀,看起來像這樣存儲字符和Int

000xx 
11xx0 
0x1x0 
11110 

我想讀取文件的文件,然後搜索「x」值並將它們替換爲「2」,然後將它們存儲在數組中以備後用。輸出應該看起來像這樣。

00022 
11220 
02120 
11110 

我不知道如果我處理這個正確的,我算了一下,將文件存儲到一個數組,然後搜索和替換。這裏是我剛剛讀取文件並嘗試打印的代碼,我嘗試使用int數組和char數組,我不知道爲什麼我無法弄清楚這一點,任何幫助將不勝感激。

int main() 
{ 

FILE *fvec; 
fvec =fopen("numbers.vec" , "r"); 
if(!fvec){printf("error reading file");} 
int col, row; 
    int array[10][10]; 

    for (col = 0; col < 10; ++col){ 
    for (row = 0; row <10; ++row){ 
    fscanf(fvec, "%d", &array[col][row]);} 
    } 


    for (col = 0; col < 10; ++col){ 
    for (row = 0; row <10; ++row){ 
     printf("%d", array[col][row]);} 
     printf("\n"); 
    } 
} 

這是我所得到的印刷

0039300480203200 
48008044 
183289603930048039300480 
+1

首先你應該也看過字符檢查'fscanf'的返回值,因爲它可能會失敗。當文件可能包含較少字節時,您正在分配一個'10x10'陣列。我建議閱讀你的文件字符char和保存在一個多維char數組。你到達一個'\ n'開始填充下一行。 –

+1

'「%d」'是整數。 'x'不是一個整數嗎?總是檢查'fscanf'的返回值。 – kaylum

+0

內環會去對面,所以你做的列中,外環應提前向下所以它你行。 – stark

回答

0

你會閱讀與ASCII字符(數字和x),則應該轉換,因此讀取字符文件到一個數字,當你閱讀的時候他們一起。其次,如您所述,您需要將字符'x'轉換爲數字2,這很簡單。此外,可以改進循環的終止條件,只讀取文件中的行數或文件中的最大行數(行數)。鑑於上述情況,你可能想要做的事,如下

memset(array, 0, sizeof(array));    // do this so that everything is set to 0 
    while ((fgets(buf, 20, fvec) != 0) && (row < 10)) { 
    printf("%s", buf); 
    for (int col = 0; col < strlen(buf); col++) { 
      if (buf[col] == 'x') { 
      array[row][col] = 2;    // turn this to digit 2 
      } else if (isdigit(buf[col])) { 
      array[row][col] = buf[col] - '0';// turn this to a digit 
      } 
    } 
    row++; 
    } 

您可以通過字符(用的fscanf%C等),但以上只是舉一個例子