はじめまして。
今プログラミングの授業で下の問題に取り組んでいるんですが、どうしていいのかいまいちよくわりません。
もしよかったら、どういうふうにやったらいいのか教えていただけませんか???
「以下の条件を満たすプログラムを作成する..
なんらかのデータを扱うプログラムであり(非常にユニークなものの場合は加点がある),データをファイルから読み込む機能と,書き込む機能がある.
自分の持っている音楽CD(コレクションしているものなど)を管理するデータベースプログラム
新しいデータ(もしくはデータの一部分)を追加する機能,特定のデータ(もしくはデータの一部分)を削除する機能がある
データのソート(並び替え)を行う機能がある. ソートを行うことが適切でないデータの場合(音声データや画像データなど)は, そのデータにあったなんらかの処理を加える機能でも良い
データから特定の部分のみを取り出して表示(もしくは保存)する機能がある
構造体を使用している
構造体のポインタを引数として持つ関数を使用している」
無題
-
hiroki
Re:無題
返事遅れてもうしわけございません。
自分なりにできたのが以下です。
ここから削除と並び替えがどうしてもできませんでした。
なにか方法はないでしょうか。
よろしくお願いします。
自分なりにできたのが以下です。
#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:無題
不要な部分があったのでコメントアウトしておきました。
GLAY
LA'rc~en~ciel
AYUMI
と書かれたmusic.txtがあるとします。
このうち、AYUMIを消したければ、このように出来ます。
#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;
}