ページ 11

データファイルの作成に関わるトラブル

Posted: 2017年2月10日(金) 17:09
by constructor2016810
入力ファイルからデータを読み込み、 合計とその平均値を求めるプラグラムをあるテキストから転写し、 ビルドしたところ、 以下のようなエラーがかかってしまいました。 どのようにすれば、 プログラムが動作するようになるでしょうか。 尚、 プログラム作成のためのアプリは Visual Studio Express 2015です。

エラー 1. 関数呼び出しの引数が少なすぎる。
    2. C4047  ’関数’: 間接参照のレベルが ’FILE**' と char[11]で異なっている。
    3. C4024 'fopen_s' の型が1の仮引数および実引数と異なっている。
    4. C2198 'fopen_s'の呼び出しに対する引数が少なすぎる。
    5. C4047 '=' :間接参照のレベルが ’FILE*'とerrno_tで異なっている。
これらのエラーが出たコードのところにメモっておきました。
よろしく、お願いいたします。

コード:


#include<stdio.h>
#include<stdlib.h>

int main(void)
{
	int val;
	int sum = 0;
	int cnt;
	FILE *fp;

	if ((fp = fopen_s("indata.dat", "r")) == NULL)                                    /* 1~5のエラーがでたところ*/
	{
		printf(" not found the file-- - indata.dat\n");
		exit(EXIT_FAILURE);
	}
	for (cnt = 0;; cnt++)
	{
		printf(" Inout data>>>");
		scanf_s("%d", &val);
		if (val == 0)
		{
			break;;
		}
		sum += val;
	}

	if (cnt > 0)
	{
		printf("Sum=%d mean=%g\n", sum, (double)sum / cnt);
	}
	fclose(fp);

	return EXIT_SUCCESS;
}

[code]

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月10日(金) 17:20
by usao
まず,fopen_s()について調べましょう.

https://msdn.microsoft.com/ja-jp/library/z5hh6ee9.aspx

戻り値の型や,引数の与え方の説明を読んで,
その通りに使うようにしましょう.

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月10日(金) 17:27
by みけCAT
オフトピック
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月10日(金) 17:47
by Math
取り敢えず1箇所なおしたらエラーがなくなった。

コード:

/*
入力ファイルからデータを読み込み、 合計とその平均値を求めるプラグラムをあるテキストから転写し、 
ビルドしたところ、 以下のようなエラーがかかってしまいました。 どのようにすれば、 
プログラムが動作するようになるでしょうか。
 尚、 プログラム作成のためのアプリは Visual Studio Express 2015です。
エラー 1. 関数呼び出しの引数が少なすぎる。
2. C4047  ’関数’ : 間接参照のレベルが ’FILE**' と char[11]で異なっている。
3. C4024 'fopen_s' の型が1の仮引数および実引数と異なっている。
4. C2198 'fopen_s'の呼び出しに対する引数が少なすぎる。
5. C4047 '=' : 間接参照のレベルが ’FILE*'とerrno_tで異なっている。
これらのエラーが出たコードのところにメモっておきました。
よろしく、お願いいたします。
*/
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
	int val;
	int sum = 0;
	int cnt;
	//FILE *fp;
	FILE *fp;
	//if ((fp = fopen_s("indata.dat", "r")) == NULL) /* 1~5のエラーがでたところ*/
	if ((fp = fopen_s(fp,"indata.dat", "r")) == NULL)
	{
		printf(" not found the file-- - indata.dat\n");
		exit(EXIT_FAILURE);
	}
	for (cnt = 0;; cnt++)
	{
		printf(" Inout data>>>");
		scanf_s("%d", &val);
		if (val == 0)
		{
			break;;
		}
		sum += val;
	}

	if (cnt > 0)
	{
		printf("Sum=%d mean=%g\n", sum, (double)sum / cnt);
	}
	fclose(fp);

	return EXIT_SUCCESS;
}
[/size]

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月10日(金) 17:54
by Math
実行時エラー

コード:

	for (cnt = 0;; cnt++)
ここが気になる。

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月10日(金) 19:11
by 沖 滉均
オフトピック
内容どうこうの前にあなたはまず過去のトピを未解決のまま放置するのをやめましょう(同じ質問を乱立し続けているようですがそこも注意されていますね)
あと、今まで何度もcodeタグで囲ってくださいと言われているにも関わらず囲わない

コード:

と[code]※どちらも開始タグであり囲えていないので、プレビューをしてから投稿する癖をつけましょう。
おかしいのが目に見えてわかるはずです。[/offtopic]

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月10日(金) 22:06
by tok
constructor2016810 さんが書きました:入力ファイルからデータを読み込み、 合計とその平均値を求めるプラグラムをあるテキストから転写し、 ビルドしたところ、 以下のようなエラーがかかってしまいました。 どのようにすれば、 プログラムが動作するようになるでしょうか。 尚、 プログラム作成のためのアプリは Visual Studio Express 2015です。

エラー 1. 関数呼び出しの引数が少なすぎる。
    2. C4047  ’関数’: 間接参照のレベルが ’FILE**' と char[11]で異なっている。
    3. C4024 'fopen_s' の型が1の仮引数および実引数と異なっている。
    4. C2198 'fopen_s'の呼び出しに対する引数が少なすぎる。
    5. C4047 '=' :間接参照のレベルが ’FILE*'とerrno_tで異なっている。
これらのエラーが出たコードのところにメモっておきました。
よろしく、お願いいたします。

コード:


#include<stdio.h>
#include<stdlib.h>

int main(void)
{
	int val;
	int sum = 0;
	int cnt;
	FILE *fp;

	if ((fp = fopen_s("indata.dat", "r")) == NULL)                                    /* 1~5のエラーがでたところ*/
	{
		printf(" not found the file-- - indata.dat\n");
		exit(EXIT_FAILURE);
	}
	for (cnt = 0;; cnt++)
	{
		printf(" Inout data>>>");
		scanf_s("%d", &val);
		if (val == 0)
		{
			break;;
		}
		sum += val;
	}

	if (cnt > 0)
	{
		printf("Sum=%d mean=%g\n", sum, (double)sum / cnt);
	}
	fclose(fp);

	return EXIT_SUCCESS;
}

[code][/quote]
fopen関数とfopen_sはパラメータの数が違うので注意したほうがいいと思います。
あと細かいところですが・・・。
平均の計算だいじょうぶですか?

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月10日(金) 23:54
by Math
それから質問者さんにお願いがあります。File とか 画像 音が必要な場合それを”忘れないで添付してほしい”という事です。
今回は数値だけですが”もし桁数とか負値指定”があるとか考えなくていいので...

indata.dat

コード:

123
456
789
それと album ボタンの上のコードボタンをおしてcodeで囲んでください。

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月11日(土) 07:07
by Math
FILE処理って意外と難しいよね!

コード:

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
	int val;
	int sum = 0;
	int cnt = 0;
	//FILE *fp;
	FILE *fp;
	errno_t err;

	err = fopen_s(&fp, "indata.dat", "r");
	if (err == 0)
	{
		printf("The file 'indata.dat' was opened\n");
	}
	else
	{
		printf("The file ''indata.dat' was not opened\n");
	}




	//if ((err = fopen_s(fp,"indata.dat", "r")) == NULL)
	//{
	//	printf(" not found the file-- - indata.dat\n");
	//	exit(EXIT_FAILURE);
	//}
	//for (cnt = 0;; cnt++)



                                            // ここのEOFは End Of File という意味
	while(fscanf_s(fp,"%d", &val) != EOF){ // ファイルから数値を読む
                                          // EOF でない限り読み込みなさいとなる
		///printf(" Inout data>>>");     // この辺り結構難しいから
				                        // 定型句として覚えるといいでしょう。
		///scanf_s("%d", &val);

		//if (val == 0)
		//{
		//	break;
		//}



		sum += val; cnt++; // 合計値
	}

	if (cnt > 0)
	{
		printf("Sum=%d mean=%g\n", sum, (double)sum / cnt);
	}
	fclose(fp);

	return EXIT_SUCCESS;
}

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月11日(土) 07:45
by みけCAT
Math さんが書きました:FILE処理って意外と難しいよね!
ファイルが開けなくてもファイルを読み込もうとするバグを埋め込むことで、難しいことを示しているのですね。
面白い表現ですね。

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月11日(土) 08:22
by Math
あ、”やばい”ですね。う~ん。まあ―そうですね。難しい実例でしょう!
「訂正」

コード:

else
	{
		printf("The file ''indata.dat' was not opened\n");
		exit(-1);
	}

Re: データファイルの作成に関わるトラブル

Posted: 2017年2月11日(土) 11:44
by constructor2016810
ご回答ありうがとうございました。  また、 当方の不注意によりお手数をお掛けしたこと恐縮に存じます。
これからは、投稿に際し、細心の注意を払うようにいたします。