簡體   English   中英

使用fgetc C讀取文件時出現問題

[英]Issues reading in file with fgetc C

因此,我正在用C語言編寫一個並行的數獨解決方案檢查器,但在讀取普通的舊.txt文件時似乎遇到了問題。

這是要在文件中讀取的代碼:

FILE* fp = fopen(argv[1], "r");
if (fp == NULL) {
    printf("Cannot open file\n");
    return 1;
}

//Begin copying file using fgetc
int c;
while ((c = fgetc(fp)) != EOF) {
    for (int i = 0; i < PUZZLE_SIZE; ++i) {
        for (int j = 0; j < PUZZLE_SIZE; ++j) {
            if (c != -38) { //-38 is newline
                //puzzle is a global array of ints
                puzzle[i][j] = c - 48; //handles ASCII to int (1-9) conversion
            }
        }
    }
}
fclose(fp);

.txt文件如下:

534678912
672195348
198342567
859761423
426853791
713924856
961537284
287419635
345286179

當我打印c-48時,我得到了預期的值。 當我在循環內打印puzzle [i] [j]時,我又得到了正常值。 但是,當我隨后查看拼圖數組時,每個值都設置為9; 對於我的一生,我無法弄清楚原因。 有我不知道的內存/作用域問題嗎?

基本上,您的程序要做的是:對於文件中的每個字符( while ),將所有拼圖條目( forfor )設置為該字符。 結果,所有條目將包含文件的最后一個字符。

您想將for循環放在外面,並為每個難題條目讀取一個字符:

for (int i = 0; i < PUZZLE_SIZE; ++i)
    for (int j = 0; j < PUZZLE_SIZE; ++j) {
        c = fgetc(fp);
        if (c == '\n')
            c = fgetc(fp); // get a new char if we hit a newline
         puzzle[i][j] = c - `0`;
    }

這是假定文件中有足夠的字符來填補難題。

暫無
暫無

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

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