無題

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

無題

#1

投稿記事 by hiroki » 18年前

はじめまして。
今プログラミングの授業で下の問題に取り組んでいるんですが、どうしていいのかいまいちよくわりません。
もしよかったら、どういうふうにやったらいいのか教えていただけませんか???


「以下の条件を満たすプログラムを作成する..

なんらかのデータを扱うプログラムであり(非常にユニークなものの場合は加点がある),データをファイルから読み込む機能と,書き込む機能がある.

自分の持っている音楽CD(コレクションしているものなど)を管理するデータベースプログラム
新しいデータ(もしくはデータの一部分)を追加する機能,特定のデータ(もしくはデータの一部分)を削除する機能がある
データのソート(並び替え)を行う機能がある. ソートを行うことが適切でないデータの場合(音声データや画像データなど)は, そのデータにあったなんらかの処理を加える機能でも良い
データから特定の部分のみを取り出して表示(もしくは保存)する機能がある
構造体を使用している
構造体のポインタを引数として持つ関数を使用している」

バグ

Re:無題

#2

投稿記事 by バグ » 18年前

hirokiさん自身でどこまで出来ましたか?
「全く出来ていない」とか「全く分からない」というのは無しです。

管理人

Re:無題

#3

投稿記事 by 管理人 » 18年前

ちょっと多すぎて、どこがわからないのかわかりません・・。

質問を限定してください。

プログラムの内容までまず掘り下げてください。自分の詰まったところでもう一度投稿してください。

hiroki

Re:無題

#4

投稿記事 by hiroki » 18年前

返事遅れてもうしわけございません。
自分なりにできたのが以下です。

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	char file0[64];
	char onngakumei[256];
	int s;
	unsigned int m;
	char buff[256];
	FILE *fp0;
	
	



	printf("\n\n");
	printf(" 音楽ファイルを管理しているファイル名を入力してください。\n ");
	printf("存在しない場合は新規作成するファイル名を入力してください。\n");
	printf("\nファイル名:");
	scanf("%s",file0);
	printf("\n");


	printf("\n 音楽ファイル管理しているプログラム名: %s\n\n",file0);


	if(NULL==(fp0=fopen(file0,"a+")))
	{
		printf("\n Cannot open file : %s\n\n", file0);
		exit(1);
	}

	
	
	printf("現在このファイルで管理されている音楽名は下記のとおりです。\n");
	printf("(新規作成した場合は空白)\n");
	
	for(m=0;m<10000;++m)
	{
		if(NULL==fgets(buff,255,fp0))
		{
			break;
		}
		printf("%5d: %s",1+m,buff);
	}



	if(NULL == (fp0 = fopen(file0, "a+")))
	{
		printf("\n Cannot open file : %s\n\n", file0);
		exit(1);
	}
	
					for(s=1;s!=0;)
				{
					printf("\n 追加したい音楽名を入力してください");
					scanf("%s",onngakumei);
					fprintf(fp0,"%s\n",onngakumei);
					printf("続けて入力:1\n入力を終了:0\n");
					scanf("%d",&s);
				}
		
					printf("入力を終了します\n\n");

	fclose(fp0);

					if(NULL==(fp0=fopen(file0,"r")))
	{
		printf("\n Cannot open file : %s\n\n", file0);
		exit(1);
	}

	printf("現在管理されている音楽名は下記のとおりに変更されました\n");
	for(m=0;m<10000;++m)
	{
		if(NULL==fgets(buff,255,fp0))
		{
			break;
		}
		printf("%5d: %s",1+m,buff);
	}

	fclose(fp0);

}

ここから削除と並び替えがどうしてもできませんでした。
なにか方法はないでしょうか。
よろしくお願いします。

管理人

Re:無題

#5

投稿記事 by 管理人 » 18年前

不要な部分があったのでコメントアウトしておきました。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	char file0[64];
	char onngakumei[256];
	int s;
	unsigned int m;
	char buff[256];
	FILE *fp0;
	
	printf("音楽ファイルを管理しているファイル名を入力してください。\n ");
	printf("存在しない場合は新規作成するファイル名を入力してください。\n");
	printf("ファイル名:");
	scanf("%s",file0);
	printf("音楽ファイル管理しているプログラム名: %s\n\n",file0);
	if(NULL==(fp0=fopen(file0,"a+"))){
		printf("Cannot open the file. : %s\n", file0);
		exit(1);
	}
	printf("現在このファイルで管理されている音楽名は下記のとおりです。\n");
	printf("(新規作成した場合は空白)\n");
	for(m=0;m<10000;++m){
		if(NULL==fgets(buff,255,fp0))
			break;
		printf("%5d: %s",1+m,buff);
	}
//	if(NULL == (fp0 = fopen(file0, "a+"))){
//		printf("\n Cannot open file : %s\n\n", file0);
//		exit(1);
//	}
	for(s=1;s!=0;){
		printf("追加したい音楽名を入力してください:");
		scanf("%s",onngakumei);
		fprintf(fp0,"%s\n",onngakumei);
		printf("続けて入力:1\n入力を終了:0\n");
		scanf("%d",&s);
	}
	printf("入力を終了します\n\n");
	fclose(fp0);
	if(NULL==(fp0=fopen(file0,"r"))){
		printf("Cannot open file : %s\n", file0);
		exit(1);
	}
	printf("現在管理されている音楽名は下記のとおりに変更されました\n");
	for(m=0;m<10000;++m){
		if(NULL==fgets(buff,255,fp0))
			break;
		printf("%5d: %s\n",1+m,buff);
	}
	fclose(fp0);
}
削除の仕方は、例えばこうです。

GLAY
LA'rc~en~ciel
AYUMI

と書かれたmusic.txtがあるとします。
このうち、AYUMIを消したければ、このように出来ます。

#include<stdio.h>
#include<stdlib.h>
int main(void){
	FILE *fp0;
	char write[2][32]={
		"GLAY",
		"LA'rc~en~ciel",
	};
	if(NULL==(fp0=fopen("music.txt","w"))){
		printf("Cannot open the file.\n");		exit(1);
	}
	fprintf(fp0,"%s\n",write[0]);
	fprintf(fp0,"%s\n",write[1]);
	fclose(fp0);
	return 0;
}

閉鎖

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