ファイルから1行ずつ数字を読み込みたいです。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
rick

ファイルから1行ずつ数字を読み込みたいです。

#1

投稿記事 by rick » 12年前

初歩的な質問で失礼致します。
200行の数字データ(double型で出力した数字)を1行ずつ読み込んでdouble型の配列に格納していく所で分からず止まっています。
数字を配列に格納したいので最終的にはdouble型の配列に入れたいのですが、型を合わせる方法が分からりませんでした。

格納された配列はぐちゃぐちゃ(数字ですらない)で目標とは違う値が格納されてしまいます。

プログラムの該当する部分だけ書きます。

コード:

#include <stdlib.h>
#include <iostream>
using namespace std;

int main(void)
{
	double MAXDATASIZE = 20.0;							//OMEGAxplot.txtの読み込む文字列の大きさ
	char OMEGA0[200];
	char OMEGA1[200];
	char OMEGA2[200];

	
	FILE *fp0, *fp1, *fp2;
	fp0 = fopen("OMEGA0plot.txt","r");
	fp1 = fopen("OMEGA1plot.txt","r");
	fp2 = fopen("OMEGA2plot.txt","r");

	int i;
		for(i=0;i<200;i++)
		{
			fgets(OMEGA0,MAXDATASIZE,fp0);
			omega0[i]=atof(OMEGA0); /*文字列として読んだものを数値化*/
		}
		
		for(i=0;i<200;i++)
		{
			fgets(OMEGA1,MAXDATASIZE,fp1);
			omega1[i] = atof(OMEGA1);
		}
		for(i=0;i<200;i++)
		{
			fgets(OMEGA2,MAXDATASIZE,fp2);
			omega2[i] = atof(OMEGA2);
		}
		fclose(fp0);
		fclose(fp1);
		fclose(fp2);
	
	return 0;
}

コード:

1>------ ビルド開始: プロジェクト: 20120111-3, 構成: Debug Win32 ------
1>2012/01/11 21:25:08 にビルドを開始しました。
1>InitializeBuildStatus:
1>  "Debug\20120111-3.unsuccessfulbuild" のタッチ タスクを実行しています。
1>ClCompile:
1>  test.cpp
1>e:\opengl\20120111-3\20120111-3\test.cpp(15): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(234) : 'fopen' の宣言を確認してください。
1>e:\opengl\20120111-3\20120111-3\test.cpp(16): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(234) : 'fopen' の宣言を確認してください。
1>e:\opengl\20120111-3\20120111-3\test.cpp(17): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(234) : 'fopen' の宣言を確認してください。
1>e:\opengl\20120111-3\20120111-3\test.cpp(22): warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。
1>e:\opengl\20120111-3\20120111-3\test.cpp(23): warning C4244: '=' : 'double' から 'char' への変換です。データが失われる可能性があります。
1>e:\opengl\20120111-3\20120111-3\test.cpp(28): warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。
1>e:\opengl\20120111-3\20120111-3\test.cpp(29): warning C4244: '=' : 'double' から 'char' への変換です。データが失われる可能性があります。
1>e:\opengl\20120111-3\20120111-3\test.cpp(33): warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。
1>e:\opengl\20120111-3\20120111-3\test.cpp(34): warning C4244: '=' : 'double' から 'char' への変換です。データが失われる可能性があります。
1>ManifestResourceCompile:
1>  すべての出力が最新のものです。
1>Manifest:
1>  すべての出力が最新のものです。
1>LinkEmbedManifest:
1>  すべての出力が最新のものです。
1>  20120111-3.vcxproj -> E:\OpenGL\20120111-3\Debug\20120111-3.exe
1>FinalizeBuildStatus:
1>  ファイル "Debug\20120111-3.unsuccessfulbuild" を削除しています。
1>  "Debug\20120111-3.lastbuildstate" のタッチ タスクを実行しています。
1>
1>ビルドに成功しました。
1>
1>経過時間 00:00:00.85
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
すみませんがよろしくお願いいたします。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: ファイルから1行ずつ数字を読み込みたいです。

#2

投稿記事 by みけCAT » 12年前

コード:

double MAXDATASIZE = 20.0;
fgets(OMEGA0,MAXDATASIZE,fp0);
データサイズの最大値をわざわざdouble型で与える理由がわかりません。

コード:

char OMEGA0[200];
omega0[i]=atof(OMEGA0); /*文字列として読んだものを数値化*/
double型のデータをchar型の変数に入れる理由がわかりません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

non
記事: 1097
登録日時: 13年前

Re: ファイルから1行ずつ数字を読み込みたいです。

#3

投稿記事 by non » 12年前

大文字と小文字は区別されて、omega0 は未定義なんじゃないかな?
エラーにならないのだっけ?なんで?
non

fides

Re: ファイルから1行ずつ数字を読み込みたいです。

#4

投稿記事 by fides » 12年前

回答ありがとうございます。
みけCAT さんが書きました:

コード:

double MAXDATASIZE = 20.0;
fgets(OMEGA0,MAXDATASIZE,fp0);
データサイズの最大値をわざわざdouble型で与える理由がわかりません。

コード:

char OMEGA0[200];
omega0[i]=atof(OMEGA0); /*文字列として読んだものを数値化*/
double型のデータをchar型の変数に入れる理由がわかりません。
コンパイルすると「型があわない」と言われてしまうのでおかしくなってました。ご指摘ありがとうございます。
指摘された部分を直しましたが、エラーがでてしまいます。

コード:

int main(void)
{
	char MAXDATASIZE = 20;							//OMEGAxplot.txtの読み込む文字列の大きさ
	double OMEGA0[200];
	double OMEGA1[200];
	double OMEGA2[200];
	
	FILE *fp0, *fp1, *fp2;
	fp0 = fopen("OMEGA0plot.txt","r");
	fp1 = fopen("OMEGA1plot.txt","r");
	fp2 = fopen("OMEGA2plot.txt","r");

	int i;
		for(i=0;i<200;i++)
		{
			fgets(OMEGA0,MAXDATASIZE,fp0);
			OMEGA0[i]=atof(OMEGA0); /*文字列として読んだものを数値化*/
		}
		
		for(i=0;i<200;i++)
		{
			fgets(OMEGA1,MAXDATASIZE,fp1);
			OMEGA1[i] = atof(OMEGA1);
		}
		for(i=0;i<200;i++)
		{
			fgets(OMEGA2,MAXDATASIZE,fp2);
			OMEGA2[i] = atof(OMEGA2);
		}
		fclose(fp0);
		fclose(fp1);
		fclose(fp2);

コード:

1>------ すべてのリビルド開始: プロジェクト: 20120111-3, 構成: Debug Win32 ------
1>2012/01/12 10:06:57 にビルドを開始しました。
1>_PrepareForClean:
1>  ファイル "Debug\20120111-3.lastbuildstate" を削除しています。
1>InitializeBuildStatus:
1>  "Debug\20120111-3.unsuccessfulbuild" のタッチ タスクを実行しています。
1>ClCompile:
1>  test.cpp
1>e:\opengl\20120111-3\20120111-3\test.cpp(13): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(234) : 'fopen' の宣言を確認してください。
1>e:\opengl\20120111-3\20120111-3\test.cpp(14): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(234) : 'fopen' の宣言を確認してください。
1>e:\opengl\20120111-3\20120111-3\test.cpp(15): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(234) : 'fopen' の宣言を確認してください。
1>e:\opengl\20120111-3\20120111-3\test.cpp(20): error C2664: 'fgets' : 1 番目の引数を 'double [200]' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照)
1>          指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>e:\opengl\20120111-3\20120111-3\test.cpp(21): error C2664: 'atof' : 1 番目の引数を 'double [200]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
1>          指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>e:\opengl\20120111-3\20120111-3\test.cpp(26): error C2664: 'fgets' : 1 番目の引数を 'double [200]' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照)
1>          指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>e:\opengl\20120111-3\20120111-3\test.cpp(27): error C2664: 'atof' : 1 番目の引数を 'double [200]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
1>          指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>e:\opengl\20120111-3\20120111-3\test.cpp(31): error C2664: 'fgets' : 1 番目の引数を 'double [200]' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照)
1>          指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>e:\opengl\20120111-3\20120111-3\test.cpp(32): error C2664: 'atof' : 1 番目の引数を 'double [200]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
1>          指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>
1>ビルドに失敗しました。
1>
1>経過時間 00:00:00.41
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========
non さんが書きました:大文字と小文字は区別されて、omega0 は未定義なんじゃないかな?
エラーにならないのだっけ?なんで?
あ、すみません。小文字のomegaの変数はあまり使いたくなくて消去してコンパイルしてました。
正しくは上記のソースです。

アバター
沖 滉均
記事: 237
登録日時: 13年前
住所: K県F市

Re: ファイルから1行ずつ数字を読み込みたいです。

#5

投稿記事 by 沖 滉均 » 12年前

fidesさん=rickさんですか?
途中で名前を変えないようにしてください。

コード:

double OMEGA0[200];
fgets(OMEGA0,MAXDATASIZE,fp0);
OMEGA0[i]=atof(OMEGA0); /*文字列として読んだものを数値化*/
どうしてこうなってしまったのでしょう?
文字列として読み込むと言っているにも関わらず引数がdouble型配列になっているのでエラーになっていますね。
エラーの内容にそのまま書いてあります。
There is no royal road to learning.
codeタグで指定できる言語
画像

non
記事: 1097
登録日時: 13年前

Re: ファイルから1行ずつ数字を読み込みたいです。

#6

投稿記事 by non » 12年前

fides さんが書きました: あ、すみません。小文字のomegaの変数はあまり使いたくなくて消去してコンパイルしてました。
変数名は小文字にして欲しいなぁ。特に先頭の1文字目は。
全部大文字だと、定数だと思っちゃう。
non

rick

Re: ファイルから1行ずつ数字を読み込みたいです。

#7

投稿記事 by rick » 12年前

>>沖 滉均さん
名前の件すみません。その時々で名前つけてたので前の質問のと間違えました。
今後気をつけます。

>>nonさん
プログラムの別の部分で小文字を使ってて、区別する意味で使っていました。
すみませんでした。


エラーは目先のエラーコードが少なるように気にし過ぎたことにあったようです。
なんとか解決できました。ありがとうございました!

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: ファイルから1行ずつ数字を読み込みたいです。

#8

投稿記事 by beatle » 12年前

フォーラムルールにありますけれど,どうやって解決したのかを示す必要があります.
今後,このスレッドを見る人の為ですのでご協力をお願いします.

アバター
沖 滉均
記事: 237
登録日時: 13年前
住所: K県F市

Re: ファイルから1行ずつ数字を読み込みたいです。

#9

投稿記事 by 沖 滉均 » 12年前

rick さんが書きました:名前の件すみません。その時々で名前つけてたので前の質問のと間違えました。
今後気をつけます。
この点についても補足ですが、フォーラムルールを一度読んでみてください。

フォーラムルール内の利用規約に以下の記述があります通り、名前を複数利用して質問する行為は規約違反となっております。
今後は、どちらかの名前に統一して、同じ名前で質問をするようにお願いします。
「C言語交流サイト ~mixC++~」についての利用規約 さんが書きました: 3. 禁止行為について
 名前を複数利用して質問する行為
There is no royal road to learning.
codeタグで指定できる言語
画像

閉鎖

“C言語何でも質問掲示板” へ戻る