課題

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

課題

#1

投稿記事 by null » 15年前

下のプログラムを実行すると、エラーがでるのですが理由がわかりません。
 疑問や書き方、おかしいと思われるところがあれば教えていただけるとありがたいです。

#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);
}

sizuma

Re:課題

#2

投稿記事 by sizuma » 15年前

 ・ (提示してある場合)自分が書いたソースプログラムはどこからどこまでなのか教えて下さい
 ・ ソースコードは< pre>と< /pre>のタグで囲んでください
 詳しくはこの掲示板の使い方をご覧ください→ http://dixq.net/board/board.html

non

Re:課題

#3

投稿記事 by non » 15年前

おかしなところはいっぱいありそうですが、まず、何のエラーか示してください。
Cなら、警告だけのような気がするのですが・・・
C++ならエラーかも。

softya

Re:課題

#4

投稿記事 by softya » 15年前

とりあえず、「規約と注意事項」をよく読んで捕捉してください。
[flash 600,100]http://dixq.net/flash/kiyaku4.swf[/flash]
規約と注意事項
http://dixq.net/board/board.html

特にテンプレを見て足らないを補足してほしいのとC言語系だと思われますので、使っているコンパイラの名称とC言語系の規格でC90,C99,C++のどれかも明確にしてくださいね。

たかぎ

Re:課題

#5

投稿記事 by たかぎ » 15年前

> エラーがでるのですが理由がわかりません。

規約を守っていないので、回答もエラーメッセージだらけになります。

Naohiro19

Re:課題

#6

投稿記事 by Naohiro19 » 15年前

家計簿のプログラムを作ろうとしてるのですか?

null

Re:課題

#7

投稿記事 by null » 15年前

コンパイラ : Microsoft Visual C++ 2008
言語  :  詳しくはわからないのですが、調べてみるとc99だと思います。
   

>>(提示してある場合)自分が書いたソースプログラムはどこからどこまでなのか教えて下さい。
全部なのですが・・・もしかして自分はおかしいことを言っているのですか?

>>家計簿のプログラムを作ろうとしてるのですか?
課題としてこういうのを作れと言われただけなので、家計簿なのかはわかりませんが、特になにかを作っているわけではないと思います。 構文などを理解してるかどうかを調べているのかもしれません。

すいません勘違いで、エラーではなくテキストに書き込めてないということです。本当すいません。

いろいろ規約違反ですいません。コメントにタグが使えるのか疑問だったので・・・。
ソールコードの前後に
を挟むだけで良いのでしょうか?htmlみたいな感じですか?

non

Re:課題

#8

投稿記事 by non » 15年前

まず、評価される優先順位を考えて
if((fp=fopen("syuppi.txt","a"))==NULL)

次に、年を入力して終了の時のreturnですが、returnしたら終わってしまって出力できません。

can`t open fileのreturnも何か値を返すようにします。

ねこ

Re:課題

#9

投稿記事 by ねこ » 15年前

>nullさん
HTMLみたいにソース部分を
タグで囲めばOKです。

結果に関しては
・ファイルが出来ない
・ファイルはあるが何も書かれていない
等思いつきますが、具体的にどう動いて欲しくてこうなってしまう、というように書くと良いかと思います。

とりあえず
[pre]
if( fp = fopen( "syuppi.txt", "a" ) == NULL )
これは
if( ( fp = fopen("syuppi.txt", "a" ) ) == NULL )
こうな気がします。

null

Re:課題

#10

投稿記事 by null » 15年前

訂正ありがとうございます。
>>次に、年を入力して終了の時のreturnですが、returnしたら終わってしまって出力できません。 
条件を書き忘れましたが、年の入力のときに0が入力された瞬間に終了するようにすることなのですが、確かにおっしゃる通りです。直したいのですが、returnで抜ける以外に方法があるのでしょうか?
  
>>can`t open fileのreturnも何か値を返すようにします。 
例えば1を返したとすると、どこにかえるのですか? 関数だったら呼び出したところですよね?
メイン関数だと・・・・??  もしメイン関数に1がreturnされたのなら意味があるのでしょうか?
すいませんくだらない質問で。

>>HTMLみたいにソース部分を
タグで囲めばOKです。
ありがとうございます。次から自信を持って使います。

>>具体的にどう動いて欲しくてこうなってしまう、というように書くと良いかと思います。
ファイルはできていますので、書き込めていないのかと思います。上で訂正してくれた通りでreturnで出力できてないみたいです。

if文はすぐに直しました。

たかぎ

Re:課題

#11

投稿記事 by たかぎ » 15年前

> 例えば1を返したとすると、どこにかえるのですか? 関数だったら呼び出したところですよね?
> メイン関数だと・・・・??  もしメイン関数に1がreturnされたのなら意味があるのでしょうか?

そのプログラムを呼び出したプログラムにかえります。
あるプログラムが、下請け処理を別のプログラムにまかせた場合、処理が成功したか失敗したかは(原則として)mainからの返却値を見るしかありません。
画面上に「エラー」と表示しても、それをプログラム的に認識するには、画像・文字認識を行わなければならないため、非常に難しくなります。

sizuma

Re:課題

#12

投稿記事 by sizuma » 15年前

>mainにreturn
Cの決まりですね。
Javaだとvoidですし、C#でもvoidです。
0以外が返された場合はたかぎさんの書いてるように失敗を呼び出し元に返すそうです。
(実際にどういう動作を呼び出しもとがしてるのかわからないので・・・)

さて、プログラムのほうを。
まず、次からじゃなくて、今最初のプログラムを編集してタグをつけてくれたら見やすくなります。

>returnで処理が終わってしまう
方法はなんだかんだ出来ると。
せっかくstopがあるんで僕はfor文からstopフラグの判定で抜け出すようにしました。
0が入力されたら、stopフラグをfalseにしてcontinueで再判定させて抜け出せばいいですね。
この場合だと、iは一つ多いと思うので、fprintfの判定を気をつけましょう。

あとは入力部分を関数にする
こうすればreturnで入力データを返せばいいですよね。

goto文を使う
まぁこんだけ単純な動作だったら使っても問題ないと。
使わなくてもできるんで使う必要もないけどね。

上のループの中に下の処理を入れる。
returnする前に処理を済ませてしまえばいいですね。
コードは見づらくなるでしょうけど。

他にも関数の書式が違ったりするんで、実際動かしてみて想定された結果と見比べてみればいい勉強になるでしょう。

null

Re:課題

#13

投稿記事 by null » 15年前

ありがとうございます。
おかげさまで無事解決しました。

continue・・・知らなかったです・・すいません。教わることなんて本当に基礎だけなんですね。構文をいろいろ調べてみることにします。

goto文おもしろそうなので今から使ってみます。

null

Re:課題

#14

投稿記事 by null » 15年前

テスト

sizuma

Re:課題

#15

投稿記事 by sizuma » 15年前

>goto
はわわ、使わなくてもいいならそれでいいんですよ^^;

たかぎ

Re:課題

#16

投稿記事 by たかぎ » 15年前

> >goto
> はわわ、使わなくてもいいならそれでいいんですよ^^;

使えるようにしておくのはよいことです。
実践的なプログラミングで、本当に必要かどうかは、使えるようになっていないと判断ができませんから。

non

Re:課題

#17

投稿記事 by non » 15年前

あれれ、何でbreakって案は出てないの?

sizuma

Re:課題

#18

投稿記事 by sizuma » 15年前

間違いない^^;
こういうのって気づかないときは気づかないのは僕だけ?

閉鎖

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