简体   繁体   中英

Issues reading in file with fgetc C

So I'm writing a parallelized sudoku solution checker in C, but I seem to be encountering an issue with reading in a plain old .txt file.

Here is the code to read in the file:

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);

The .txt file is as follows:

534678912
672195348
198342567
859761423
426853791
713924856
961537284
287419635
345286179

When I print c - 48, I get the expected values; when I print puzzle[i][j] inside of the loops, I get the normal values again. However, when I look at my puzzle array afterward, every value is set to 9; I cannot, for the life of me, figure out why. Is there a memory/scoping issue that I'm not aware of?

Basically, what your program does is: For every character in the file ( while ), set ALL ( for , for ) puzzle entries to that character. As a result, all entries will contain the file's last character.

You want to put the for loops on the outside and read one character per puzzle entry instead:

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`;
    }

This is assuming that there are enough characters in the file to fill the puzzle.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM