拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何按整数读取档案整数并将它们放入二维阵列中?

如何按整数读取档案整数并将它们放入二维阵列中?

白鹭 - 2022-01-23 2083 0 0

我正在尝试从 txt 档案中读取所有数字并将它们放入二维阵列中。我不应该担心大小和东西,因为我知道它会被输入 9 行,每行会有 9 个数字。但是,如果我运行此代码,则会得到以下输出。

int main() {
    FILE *fpointer = fopen("filename.txt", "r");
    int ch;
    int arr[9][9];
    for (int i = 0; i < 9; i  ) {
        for (int j = 0; j < 9; j  ) {
            ch = fgetc(fpointer);
            arr[i][j] = ch;
            //printf("%d", ch);
        }
    }
    for (int i = 0; i < 9; i  ) {
        for (int j = 0; j < 9; j  ) {
            printf("%d  ", arr[i][j]);
        }
        printf("\n");
    }
    fclose(fpointer);
    return 0;
}

输出:

49  51  52  53  54  55  48  57  50
10  52  50  49  57  56  51  55  52
49  10  51  49  50  52  57  56  55
49  51  10  52  50  51  53  49  51
53  49  49  10  50  51  52  54  51
53  55  50  49  10  53  50  51  54
55  56  50  52  53  10  54  52  54
53  56  57  51  50  49  10  53  52
57  50  57  56  51  53  54  10  50

但输入的数字是:

134567092
421983741
312498713
423513511
234635721
523678245
646589321
549298356
234698721

我认为它可能必须对fgets()函式做一些事情,但我尝试使用getw(),但后来我得到了更糟糕的数字。也许它试图以十六进制或其他形式读取档案。有任何想法吗?

uj5u.com热心网友回复:

我不完全确定你在这里希望什么行为,但我建议在将数字存盘在阵列中之前译码 ASCII 数字,如下所示:

arr[i][j] = ch - '0';

另请注意,fgetc将回传行结束字节,如 10,因为这些也是您档案中的字符,即使它们不完全可见。因此,当您收到其中一个时,您需要将其丢弃并fgetc再次呼叫或者您可以fgetc在每行的末尾(在您的j回圈之后)插入一个额外的呼叫来读取它们。

uj5u.com热心网友回复:

看起来您需要将字符从数字的 ascii 表示形式转换为实际数字。另请参阅:将字符数字转换为 C 中的相应整数

所以这部分:

    for(int j =0; j<9;j  ){
        ch = fgetc(fpointer);
        arr[i][j] = ch;
        //printf("%d", ch);
    }

会变成这样:

    for(int j =0; j<9;j  ){
        ch = fgetc(fpointer);
        if(isdigit(ch)) {
            ch = ch - '0';
        } else {
            printf("error: Non-digit found!\n");
            exit(1);
        }
        arr[i][j] = ch;
        //printf("%d", ch);
    }
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *