簡體   English   中英

將文本文件讀入2D數組

[英]Read text file into 2D array

因此,目前我有一個工作代碼,該代碼能夠讀取包含9x9電路板的文本文件,二維數組中的每個插槽都是1-9之間的數字; 但是,某些插槽中隨機混有一個'-'字符。 我發現我可以成功讀取所有行然后打印它們的唯一方法是使用char sudoku[9][9]但這極大地影響了我當前作業的其他部分。

該文件應該是連續9行,如下所示:

123-56-89
4561-3--9

等等...

有人可以告訴我一種可以成功地將文本文件內容掃描到INTEGER 2D數組而不是char數組中的方法嗎?

int main(){
 int i, j;
 char sudoku[9][9];
    char filename[100];

        printf("Please enter file name (W/O .txt): ");
        scanf("%s", filename);

        FILE *file1 = fopen(filename, "r");

        for(i=0;i<9;i++){
            for(j=0;j<9;j++){
                fscanf(file1,"%c\t", &sudoku[i][j]);
            }
        }

        for(i=0;i<9;i++){
            for(j=0;j<9;j++){
                printf("%2c", sudoku[i][j]);
                }
            printf("\n");
        }

fclose(file1);
}
int suduku[9][9];

for (int i = 0; i < 9; i++)
{
    for (int j = 0; j < 9; j++)
    {
        char c;
        if (fscanf(file1, " %c", &c) != 1)
            …report read failure and exit…
        else if (isdigit((unsigned char)c))
            sudoku[i][j] = c - '0';
        else
            sudoku[i][j] = 0;
    }
}

將字符讀取為字符,然后轉換為適當的整數。 請注意,該代碼將不在乎矩陣中的每個字符是否與下一字符之間用十幾行空白行隔開,並且該字符前是否有20個空格,或者整個輸入是否在一行上是81個字符,或其他任何變化形式。 只要文件中至少有81個非空白字符,就可以了。

#include <stdlib.h>
/* ... */
int sudoku[9][9];
/* ... */
for(i = 0; i < 9; i++) {
    for(j = 0; j < 9; j++) {
        char s[] = "0";
        fscanf(file1, " %c", &s[0]);
        sudoku[i][j] = atoi(s);
    }
}

我更喜歡在可能的地方調用標准庫函數來執行整數轉換。 在這里,我正在使用atoi()。 如果看到數字,它將返回其整數值。 如果看到其他任何東西,包括'-'字符,它將返回0。如果fscanf()用完了字符,atoi()也將返回0(因為我們在每次迭代中都將s初始化為“ 0”)用'-'字符填充數組的其余部分。 (注意,從技術上講,s是字符串而不是字符,因為那是atoi()期望的輸入,但是fscanf()只會覆蓋存儲字符的第一個字節。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM