課題
課題
下のプログラムを実行すると、エラーがでるのですが理由がわかりません。
疑問や書き方、おかしいと思われるところがあれば教えていただけるとありがたいです。
#include<stdio.h>
struct syuppi
{
char name[21];
unsigned int bunrui;
int year,month,day,cost;
};
int main()
{
struct syuppi data[100]; int i,j,stop;
FILE *fp;
if(fp=fopen("syuppi.txt","a")==NULL)
{ printf("can`t open file."); return;}
for(i=0;;i++)
{
printf("年");
scanf("%d",&data.year); if(data.year==0) { printf("終了します。"); return;}
printf("月");
scanf("%d",&data.month);
printf("日");
scanf("%d",&data.day);
printf("分類");
scanf("%d",&data.bunrui);
printf("出費");
scanf("%d",&data.cost);
printf("名前");
scanf("%s",&data.name);
}
for(j=0;j<i;j++)
{
fprintf(fp,"%s %d %d %d %d %d\n",&data[j].name,data[j].bunrui,data[j].year,data[j].month,data[j].day,data[j].cost);
}
fclose(fp);
return(0);
}
疑問や書き方、おかしいと思われるところがあれば教えていただけるとありがたいです。
#include<stdio.h>
struct syuppi
{
char name[21];
unsigned int bunrui;
int year,month,day,cost;
};
int main()
{
struct syuppi data[100]; int i,j,stop;
FILE *fp;
if(fp=fopen("syuppi.txt","a")==NULL)
{ printf("can`t open file."); return;}
for(i=0;;i++)
{
printf("年");
scanf("%d",&data.year); if(data.year==0) { printf("終了します。"); return;}
printf("月");
scanf("%d",&data.month);
printf("日");
scanf("%d",&data.day);
printf("分類");
scanf("%d",&data.bunrui);
printf("出費");
scanf("%d",&data.cost);
printf("名前");
scanf("%s",&data.name);
}
for(j=0;j<i;j++)
{
fprintf(fp,"%s %d %d %d %d %d\n",&data[j].name,data[j].bunrui,data[j].year,data[j].month,data[j].day,data[j].cost);
}
fclose(fp);
return(0);
}
Re:課題
・ (提示してある場合)自分が書いたソースプログラムはどこからどこまでなのか教えて下さい
・ ソースコードは< pre>と< /pre>のタグで囲んでください
詳しくはこの掲示板の使い方をご覧ください→ http://dixq.net/board/board.html
・ ソースコードは< pre>と< /pre>のタグで囲んでください
詳しくはこの掲示板の使い方をご覧ください→ http://dixq.net/board/board.html
Re:課題
とりあえず、「規約と注意事項」をよく読んで捕捉してください。
[flash 600,100]http://dixq.net/flash/kiyaku4.swf[/flash]
規約と注意事項
http://dixq.net/board/board.html
特にテンプレを見て足らないを補足してほしいのとC言語系だと思われますので、使っているコンパイラの名称とC言語系の規格でC90,C99,C++のどれかも明確にしてくださいね。
[flash 600,100]http://dixq.net/flash/kiyaku4.swf[/flash]
規約と注意事項
http://dixq.net/board/board.html
特にテンプレを見て足らないを補足してほしいのとC言語系だと思われますので、使っているコンパイラの名称とC言語系の規格でC90,C99,C++のどれかも明確にしてくださいね。
Re:課題
コンパイラ : Microsoft Visual C++ 2008
言語 : 詳しくはわからないのですが、調べてみるとc99だと思います。
>>(提示してある場合)自分が書いたソースプログラムはどこからどこまでなのか教えて下さい。
全部なのですが・・・もしかして自分はおかしいことを言っているのですか?
>>家計簿のプログラムを作ろうとしてるのですか?
課題としてこういうのを作れと言われただけなので、家計簿なのかはわかりませんが、特になにかを作っているわけではないと思います。 構文などを理解してるかどうかを調べているのかもしれません。
すいません勘違いで、エラーではなくテキストに書き込めてないということです。本当すいません。
いろいろ規約違反ですいません。コメントにタグが使えるのか疑問だったので・・・。
ソールコードの前後にを挟むだけで良いのでしょうか?htmlみたいな感じですか?
言語 : 詳しくはわからないのですが、調べてみるとc99だと思います。
>>(提示してある場合)自分が書いたソースプログラムはどこからどこまでなのか教えて下さい。
全部なのですが・・・もしかして自分はおかしいことを言っているのですか?
>>家計簿のプログラムを作ろうとしてるのですか?
課題としてこういうのを作れと言われただけなので、家計簿なのかはわかりませんが、特になにかを作っているわけではないと思います。 構文などを理解してるかどうかを調べているのかもしれません。
すいません勘違いで、エラーではなくテキストに書き込めてないということです。本当すいません。
いろいろ規約違反ですいません。コメントにタグが使えるのか疑問だったので・・・。
ソールコードの前後にを挟むだけで良いのでしょうか?htmlみたいな感じですか?
Re:課題
訂正ありがとうございます。
>>次に、年を入力して終了の時のreturnですが、returnしたら終わってしまって出力できません。
条件を書き忘れましたが、年の入力のときに0が入力された瞬間に終了するようにすることなのですが、確かにおっしゃる通りです。直したいのですが、returnで抜ける以外に方法があるのでしょうか?
>>can`t open fileのreturnも何か値を返すようにします。
例えば1を返したとすると、どこにかえるのですか? 関数だったら呼び出したところですよね?
メイン関数だと・・・・?? もしメイン関数に1がreturnされたのなら意味があるのでしょうか?
すいませんくだらない質問で。
>>HTMLみたいにソース部分を
>>次に、年を入力して終了の時のreturnですが、returnしたら終わってしまって出力できません。
条件を書き忘れましたが、年の入力のときに0が入力された瞬間に終了するようにすることなのですが、確かにおっしゃる通りです。直したいのですが、returnで抜ける以外に方法があるのでしょうか?
>>can`t open fileのreturnも何か値を返すようにします。
例えば1を返したとすると、どこにかえるのですか? 関数だったら呼び出したところですよね?
メイン関数だと・・・・?? もしメイン関数に1がreturnされたのなら意味があるのでしょうか?
すいませんくだらない質問で。
>>HTMLみたいにソース部分を
タグで囲めばOKです。 ありがとうございます。次から自信を持って使います。 >>具体的にどう動いて欲しくてこうなってしまう、というように書くと良いかと思います。 ファイルはできていますので、書き込めていないのかと思います。上で訂正してくれた通りでreturnで出力できてないみたいです。 if文はすぐに直しました。
Re:課題
>mainにreturn
Cの決まりですね。
Javaだとvoidですし、C#でもvoidです。
0以外が返された場合はたかぎさんの書いてるように失敗を呼び出し元に返すそうです。
(実際にどういう動作を呼び出しもとがしてるのかわからないので・・・)
さて、プログラムのほうを。
まず、次からじゃなくて、今最初のプログラムを編集してタグをつけてくれたら見やすくなります。
>returnで処理が終わってしまう
方法はなんだかんだ出来ると。
せっかくstopがあるんで僕はfor文からstopフラグの判定で抜け出すようにしました。
0が入力されたら、stopフラグをfalseにしてcontinueで再判定させて抜け出せばいいですね。
この場合だと、iは一つ多いと思うので、fprintfの判定を気をつけましょう。
あとは入力部分を関数にする
こうすればreturnで入力データを返せばいいですよね。
goto文を使う
まぁこんだけ単純な動作だったら使っても問題ないと。
使わなくてもできるんで使う必要もないけどね。
上のループの中に下の処理を入れる。
returnする前に処理を済ませてしまえばいいですね。
コードは見づらくなるでしょうけど。
他にも関数の書式が違ったりするんで、実際動かしてみて想定された結果と見比べてみればいい勉強になるでしょう。
Cの決まりですね。
Javaだとvoidですし、C#でもvoidです。
0以外が返された場合はたかぎさんの書いてるように失敗を呼び出し元に返すそうです。
(実際にどういう動作を呼び出しもとがしてるのかわからないので・・・)
さて、プログラムのほうを。
まず、次からじゃなくて、今最初のプログラムを編集してタグをつけてくれたら見やすくなります。
>returnで処理が終わってしまう
方法はなんだかんだ出来ると。
せっかくstopがあるんで僕はfor文からstopフラグの判定で抜け出すようにしました。
0が入力されたら、stopフラグをfalseにしてcontinueで再判定させて抜け出せばいいですね。
この場合だと、iは一つ多いと思うので、fprintfの判定を気をつけましょう。
あとは入力部分を関数にする
こうすればreturnで入力データを返せばいいですよね。
goto文を使う
まぁこんだけ単純な動作だったら使っても問題ないと。
使わなくてもできるんで使う必要もないけどね。
上のループの中に下の処理を入れる。
returnする前に処理を済ませてしまえばいいですね。
コードは見づらくなるでしょうけど。
他にも関数の書式が違ったりするんで、実際動かしてみて想定された結果と見比べてみればいい勉強になるでしょう。