我正在嘗試從 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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390710.html
