fprintfでの文字化け
Cで作ったプログラムなのですが最後の部分でファイルに出力すると数字が
文字化けして出てきます(‰など)その原因を教えて頂ければ嬉しいです
他にも何かあれば教えてください
プログラミングは詳しくないのでゴロゴロ見つかるかもしれません
【プログラム】
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
int a,i,j,k,t;
double p,p1,b;
int X[999][1000],Y[999][1000];
int s0,s1,delta;
int main(void)
{
int**X = calloc(sizeof(int),sizeof(int)*1000);
int**Y = calloc(sizeof(int),sizeof(int)*1000);
FILE *output;
output=fopen("monte.dat","w");
b = 0.01; /*逆温度*/
srand((unsigned int)time(0));
/*メモリの確保*/
if( X == NULL ){
exit( EXIT_FAILURE );
}
for(i=0; i<=999; ++i){ /* 各列分の領域を割り当てる */
X[i] = (int*)calloc(sizeof(int),sizeof(int)*1000);
}
if( Y == NULL ){
exit( EXIT_FAILURE );
}
for(i=0; i<=999; ++i){ /* 各列分の領域を割り当てる */
Y[i] = (int*)calloc(sizeof(int),sizeof(int)*1000);
}
/*終わり*/
/*初期配列の設定*/
for(i=0;i<1000;i++){
X[0][i]=a;
a = (int)((rand() / ((double)RAND_MAX+1.0)) * 2);//debag
}
/*終わり*/
for(t=0;t<2;t++){ //debag
/*配列中a番目を抽出*/
a = 10; //debag
/*終わり*/
/*a番目のスピンを逆にした配列作成*/
for(j=0;j<1000;j++){
Y[t][j] = X[t][j];
}
Y[t][a] = (X[t][a]+1)%2;
/*終わり*/
/*遷移確率p1計算*/
s0=0;
s1=0;
for(k=0;k<1000;k++){
s0=s0+pow(-1,X[t][k]+X[t][k+1]);//(11),(00)なら値1
s1=s1+pow(-1,Y[t][k]+Y[t][k+1]);//(10),(01)なら値-1
}
delta = -s1 + s0;
p1 = 0.5 * (1 - tanh(0.5 * b * delta));
printf("%d %d %d %f ",s0,s1,delta,p1); //←この時点ではX[t][]は正しく出力する
/*終わり*/
/*新しい配列(i番目の符号を交換するか)*/
p = (double)((rand() / ((double)RAND_MAX+1.0)) * 1);
for(j=0;j<1000;j++){
X[t+1][j] = X[t][j];
}
if(p<=p1){
X[t+1][a] = (X[t][a]+1)%2;
printf("交換したよ! %d → %d\n",X[t][a],X[t+1][a]);
}
else{
X[t+1][a] = X[t][a];
printf("交換しないよ!\n");
}
/*終わり*/
}
/*記入*/
for(i=0;i<1000;i++){
fprintf(output,"%d ",X[0][i]); //←ここが文字化けする
}
fprintf(output,"\n");
for(i=0;i<1000;i++){
fprintf(output,"%d ",Y[0][i]); //←出力されない
}
/*終わり*/
fclose(output);
return 0;
}
【プログラム終】
お礼
回答ありがとうございます! おかげさまで解決しました。