私はそれが私がそれを望む方法の数字のリストを生成するプログラム(誰のコードが下に利用可能です)を持っています。プログラムは正常に動作し、正確に私がしたいものです。私はそれを書いた方法のファンではない。私が1つのことを変更すると、「セグメンテーションフォールト」が返されます。ここでは、コードです:今(別の)Cループとデータ構造に関する質問
#include "stdio.h"
#include "stdlib.h"
#define NCH 81
// Generate swap-mode data for bonds for input.conf file
int main()
{
int i,j,k;
int **dat2, *dat;
//double *dat;
int ns = 500;
int nrow = NCH*(ns-1);
dat = (int*) calloc(nrow, sizeof(int));
dat2 = (int**) calloc(nrow,sizeof(int*));
for (i=0; i<nrow; i++) {
dat2[i] = (int*) calloc(2, sizeof(int));
for (j=0; j<2; j++)
dat2[i][j] = 0;
}
// Generates the bonds
k=2;
for (i=0; i<nrow; i++) {
k--;
for (j=0; j<2; j++) {
dat2[i][j] = k++;
if (((k%501) == 0)) {
k--;
dat2[i][j] = k++;
k++;
}
}
}
FILE *inp2;
inp2 = fopen("bonds.out", "w");
for (i=1; i<=nrow; i++)
fprintf(inp2, "%d %d\n", dat2[i-1][0], dat2[i-1][1]);
fclose(inp2);
// Generates the bond ID in the pattern 1 2 3 3 2 1 ... (appropriate for Bond swap!)
k=1;
while (k < nrow) {
for (j=0; j<250; j++) {
dat[k] = (j+1);
k++;
}
for (j=250; j>0; j--) {
dat[k] = j;
k++;
}
}
// Scans bonds.out (because just reporting dat2[][] returns segmentation error, not sure why.
// scans the bonds.out file and stores both values into dm1 and dm2, then reports into 'results.out' file
int dm1, dm2;
FILE *inp;
inp = fopen("input.out", "w");
inp2 = fopen("bonds.out", "r");
for (i=1; i<=nrow; i++) {
fscanf(inp2, "%d %d", &dm1, &dm2);
fprintf(inp, "%d %d %d %d\n", i, dat[i], dm1, dm2);
}
printf("\nDone. All data has been written to \"input.out\"\n");
fclose(inp2);
fclose(inp);
return 0;
}
は、私はそれが最初のファイルへのdat2[][]
を書き込み、その後、値のため、そのファイルをスキャンするという事実が好きではありません。代わりに、を"results.out"
ファイルを書き込むメインループに組み込むことができないのはなぜですか?私がそうするなら、私はセグメンテーション違反を得る。これらに
for (i=1; i<=nrow; i++) {
fscanf(inp2, "%d %d", &dm1, &dm2);
fprintf(inp, "%d %d %d %d\n", i, dat[i], dm1, dm2);
}
:明確にするために、私は、コードに次の行を変更する意味
for (i=1; i<=nrow; i++) {
fprintf(inp, "%d %d %d %d\n", i, dat[i], dat2[i-1][0], dat2[i-1][1]);
}
私はまだ感謝C.
に非常に新しいんだと私は説明をみたいですたくさん! アミット
これは私の友人のコードです。 –
私は知っています。本当にお詫び申し上げます。私はあなたがそのすべてを読む必要はないと思う。おそらく最後のビットに集中するだけでしょうか? – Amit