で行列私は私の仕事で問題にかなり良い解決策を見つけるたびに、常にその気持ちを台無しにC言語でコーディングを開始...いくつかの簡単なCコードとnoobingなぜそれが働いていないのOO 私は2次元配列(配列の配列)で行列を表現し、テキストファイルからそれを記入したいと思います。コードは悪いです、コードは醜いです...私はあなたから取ってくることができるチップ/トリックに興味があります:ストアN ^(n個の* n)でC
私の論理には何が間違っていますか?フードの下には何がありますか? []
演算子を期待通りに使用していませんか?単に2D配列を反復処理する方法がわかりませんか?私はfor()
の宣言を使って、clでWindows上でこのソースをコンパイルし、神は厳密にCのようなものが何であるかを知っています。
入力は、マトリックスのサイズとその要素を空白で区切ったテキストファイルです。この構文は次のとおりです。file:= {n、A | N:-N、A:= N ^(n個の* n)で}たとえば
:
3
1 3 2
4 5 2
7 0 1
だからここにある...カバーを取ります!
ファイルの最初の整数に基づいて配列を割り当てる、ファイル、最小限のコードをチェックし、エラーなし:) 今FILE *fp = fopen("mat_mul.test", "r");
を開く
#include <stdio.h>
int main(int argc, char **argv) {
...これは正しいですか?配列の配列を割り当てるためのより良いアプローチはありますか? D
char act;
int i = 0, j = 0;
while (EOF != (act = fgetc(fp)))
if ('0' <= act && '9' >= act)
A[j == n - 1 ? i++ : i][j == n - 1 ? j = 0 : j++] = act - '0';
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("A[%i][%i]=%i\n", i, j, A[i][j]);
}
}
余すことなく、クリーニング:
int n = fgetc(fp) - '0';
int **A = (int**) malloc(sizeof(int*) * n);
for (int i = 0; i < n; i++)
A[i] = (int*) malloc(sizeof(int) * n);
AAAND、ここでは魔法、そのマスターに対するなったもの呪文です!あなたは、ブラケットの第二の対中j
に割り当てる
A[j == n - 1 ? i++ : i][j == n - 1 ? j = 0 : j++] = act - '0';
ともにその値にアクセス:あなたは一度ここで、行と列の割り当てと進歩をしようとするときは、未定義の振る舞いを呼び出す
if (fclose(fp)) {
return 0;
}
「char act;」で始まる - > int act; ' –
[' fgetc'](http://en.cppreference.com/w/c/io/fgetc)はあなたが知っているように、1文字を読み込みます。最初の行にはいくつの文字があるのでしょうか? 1つではありませんが、* 2 *、改行を忘れてしまいます。私はデバッガを使用することを習得することを推奨します。そのため、同時にすべての変数の値を監視することができます。 –
しかし、それはすべての繰り返しでif()のために無視されるか、間違っていますか? – NMD