![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ファイル操作について教えてほしいのですが、
例えば、(極端な話ですが)
AさんがBさんに飴玉をあげたのが分かったら
ファイルにAさんとBさんの組を登録し、
Aさんのカウンタを1つ増やす。
そしてBさんがAさんにお返しに飴玉をあげたら
Aさんのカウンタを1つ減らす。
お返しをしなかったらAさんのカウンタは1のまま
というようなプログラムを作成したいんですが
どうやったらいいのかわかりません。誰か分かる人が
いらっしゃいましたらご教授お願いします。
if(AさんがBさんに飴玉をあげたのが分かったら) {
FILE *fp;
fp = fopen("filename", "a");
fprintf(fp, "A"); /* filenameというファイルにAとBの組を登録*/
fprintf(fp, " B\n");
---filenameの中---------------------
あげた人:A もらった人:B A=1
------------------------------------
というように計算しようとしています
お願いします。
No.2ベストアンサー
- 回答日時:
まぁ書かれている仕様だけならこんな(↓)ところでしょうね
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#defineACTOR_SIZE100
#definetrue1
#definefalse0
#defineFILE_NAME"foo.txt"
typedefstruct _Actor {
charname;
intcnt;
} Actor;
intRegNo( char name, Actor actor[] ) {
inti;
for ( i = 0; i < ACTOR_SIZE; i++ ) {
if ( actor[i].name == 0 )break;
if ( actor[i].name == name)return i;
}
if ( i == ACTOR_SIZE )exit( 0 );
actor[i].name = name;
actor[i].cnt = 0;
return i;
}
intmain() {
Actoractor[ACTOR_SIZE];
charname;
intindex1, index2;
FILE*fp;
memset( actor, 0, sizeof( actor ) );
while( true ) {
printf( "あげた人:" );
name = getchar();
getchar();
index1 = RegNo( name, actor );
actor[index1].cnt++;
printf( "もらった人:" );
name = getchar();
getchar();
index2 = RegNo( name, actor );
actor[index2].cnt--;
fp = fopen( FILE_NAME, "a" );
if ( fp == NULL )exit( 0 );
fprintf( fp, "あげた人:%c もらった人:%c %c=%d\n",
actor[index1].name,
actor[index2].name,
actor[index1].name,
actor[index1].cnt );
fclose( fp );
}
return 0;
}
プログラム中の細かいエラーチェックなどは自分で付け足してください。
ただ仕様としては足りない所がまだあって、
・同一人物間の飴玉のやり取りは成立するのか
・カウンタのディフォルト値が無いので0にしたが、カウンタが0の人は飴玉が貰えるのか(そもそもこれが成り立たないとプログラムは開始できませんが…)
・名前の長さは良いとしても登場人物の人数制限は?
さらに書けば「ファイル操作について教えて欲しい」とありますが、ファイル操作の何が判らないのですか?
この回答への補足
貴重な時間をありがとうございます。上記のプログラムで自分がやりたいことはなんとか出来そうです。
説明が未熟でもうしわけありません。
実際に自分が作りたいプログラムはイーサネットから送信元IPアドレスと送信先IPアドレスを取得し、送信元、送信先IPアドレスを登録、そして送信先IPアドレスのカウンタを1つ増やす所まではいいんですが、そのあと、送信先IPアドレスから送信元IPアドレスを検索してそのアドレスからカウンタを1つ減らすというプログラムを作ろうと考えています。
ファイル操作について教えて欲しいと書いたのは登録した後、ファイルを読みこみ送信先IPアドレスから送信元IPアドレスを検索、そしてカウンタを1つ減らすというファイル操作の仕方が分からなかったので質問させて頂きました。
No.3
- 回答日時:
例えば、
カウントに関するファイルを
Aさんのカウントファイル:A.dat
として、やりとりについては、A.log
みたいな形に分離すればいちいちファイルの中を検索しないですみます
例えばカウントアップは以下のような感じ
#include <stdio.h>
void main(void){
FILE *fp;
int count=0;
if(NULL!=(fp=fopen("A.dat","r"))) {
fread(&count,sizeof(int),1,fp);
fclose(fp);
}
count++;
if(NULL!=(fp=fopen("A.dat","w"))) {
fwrite(&count,sizeof(int),1,fp);
fclose(fp);
}
}
No.1
- 回答日時:
がると申します。
まずいくつか質問なのですが。
1.
「Aさんの飴玉」についてはあげたらインクリメント、お返しをもらったらデクリメントといった感じで数値管理をしているようなのですが、Bさんに対しては同様の処理をしないのでしょうか?
2.
登場人物は常に二人でしょうか? それとも三人以上になることを考慮したコーディングが必要なのでしょうか?
3.
プログラムが無限ループのように回って、入力待ちで処理を続けるのでしょうか?(これだと、一時的なデータをすべてメモリ上に展開しておけます)
それとも、一回一回プログラムが終了して、常にファイルに書き出す必要があるのでしょうか?
4.
最終的な結果ファイルのほかに、一時的なデータを保存するファイルなどを作成することは可能なのでしょうか?
このあたりで結構つくりが変わってくるかと思います。
この回答への補足
早速のご返答ありがとうございます。
1つ目の質問は処理はしないです。でもBさんがお返しではなく誰かに飴玉をあげた場合、Bさんもインクリメントになります。ここで肝心なのはあげた人にインクリメントを行なうことと考えています。
2つ目は登場人物は多数になります。プログラム中で登場人物をどんどん取得していくことになります。
3つ目は無限ループでどんどん登場人物を取得していきます。
4つ目は可能です。
という感じなんですがよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/02 11:48
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/01 12:54
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の課題です
-
csvファイルの読み込みで失敗し...
-
commons-netでのFTP送信について
-
c言語でのfscanfについて
-
【C言語】ファイルを読み込んで...
-
「コマンドライン引数チェック...
-
fscanfでループしてしまう。
-
C言語でセグメンテーションエ...
-
CRC32の計算方法
-
C言語でファイル読み書きを早く...
-
ファイルに行番号を追加
-
C++で、先頭に同じ文字列がある...
-
テキストファイル内に対して, ...
-
C言語にてXMLファイルから任意...
-
fgets( ) の返り値は何?
-
大量の入力ファイルを扱うとき...
-
c言語 DFAのプログラム
-
_popen() のエラー取得
-
ファイルが読み込めない・・・
-
複数ファイルの同時読み込みの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ガンマ変換 C言語でプログラ...
-
c言語でのfscanfについて
-
なぜCSQとCIP形式ではコ...
-
複数ファイルの同時読み込みの...
-
fopenでファイル名に、変数を使...
-
ファイル出力で改行を入れたい!
-
ファイルへの書込み処理が異常...
-
【C言語】ファイルを読み込んで...
-
エラーがわかりません、、
-
C言語でセグメンテーションエ...
-
C言語でファイル読み書きを早く...
-
テキストファイル内に対して, ...
-
fgets( ) の返り値は何?
-
ファイルに行番号を追加
-
OpenGLによる描画内容をBMP出力
-
fscanfでループしてしまう。
-
c言語 ファイルから数字を読み...
-
ファイルが読み込めない・・・
-
CRC32の計算方法
-
CSVファイルの内容を構造体に格...
おすすめ情報