ページ 1 / 1
データファイルの作成に関わるトラブル
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
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
それと
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
ご回答ありうがとうございました。 また、 当方の不注意によりお手数をお掛けしたこと恐縮に存じます。
これからは、投稿に際し、細心の注意を払うようにいたします。