|
コンパイラはBorland C++Compiler 5.5でOSはwindowsです。
今まで、linux環境でプログラムをしていたのですが、新しくwindows環境でプログラムをしているときに気がついたことについての質問をさせていただきたいと思います。
以下のプログラムをコンパイルして実行するとint型ではうまく表示できないのですがdouble型ではうまく表示できているのはなぜなのでしょうか。
int型でうまく表示されないのはOSがlinux等のUNIX系OSではないため改行ードの変換が行われているためだと思うのですが、それでいいのでしょうか。
また、それが正しいとすると、たまたまdouble型だとうまく表示されているだけなのでしょうか。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
int outbf[10] = {8,9,10,11,12,13,14,15,16,17};
int inbuf[10];
double out[10] = {8.1,9.2,10.3,11.4,12.5,13.6,14.7,15.8,16.9,17.0};
double in[10];
int i;
char s[20]="int.dat", ss[20]="double.dat";
/* ファイルをテキスト書き込みモードでオープン */
if((fp = fopen(s, "w")) == NULL ) {
printf("ファイルオープンエラー\n");
exit(1);
}
/* ファイルにデータを書き込み */
printf("int型のデータの書き込み\n");
printf("fwrite :%d個データを書き込み\n", fwrite(outbf, sizeof(int), 10, fp) );
fclose(fp);
for (i=0; i<10; i++)
printf("%d ",outbf[i]);
printf("\n");
/* ファイルをバイナリ読み込みモードでオープン */
if((fp = fopen(s, "rb")) == NULL ) {
printf("ファイルオープンエラー\n");
exit(1);
}
/* 書き込んだデータを読み込んでみる */
printf("バイナリモードfread :%d個データを読み込み\n", fread(inbuf, sizeof(int), 10, fp));
fclose(fp);
for (i=0; i<10; i++)
printf("%d ",inbuf[i]);
printf("\n");
printf("\n");
/* double型で保存 */
/* ファイルをテキスト書き込みモードでオープン */
if((fp = fopen(ss, "w")) == NULL ) {
printf("ファイルオープンエラー\n");
exit(1);
}
/* ファイルにデータを書き込み */
printf("double型のデータの書き込み\n");
printf("fwrite :%d個データを書き込み\n", fwrite(out, sizeof(double), 10, fp) );
fclose(fp);
for (i=0; i<10; i++)
printf("%f ",out[i]);
printf("\n");
/* ファイルをバイナリ読み込みモードでオープン */
if((fp = fopen(ss, "rb")) == NULL ) {
printf("ファイルオープンエラー\n");
exit(1);
}
/* 書き込んだデータを読み込んでみる */
printf("バイナリモードfread :%d個データを読み込み\n", fread(in, sizeof(double), 10, fp));
fclose(fp);
for (i=0; i<10; i++)
printf("%f ",in[i]);
printf("\n");
return 0;
}
|