住所録プログラムで…

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

住所録プログラムで…

#1

投稿記事 by ほのか » 16年前

添付ファイルのソースをご覧頂きたく思います。
データを変更する関数内の「データを変更します。よろしいですか」で「N」を入力した際、「変更する項目番号は?」のところに戻りたいのですが、どうすれば戻れるでしょうか?
それと、変更データを入力したあと変更データ以外のデータが文字化けするのですが…
何か解決策があれば教えていただけると幸いです;

Mist

Re:住所録プログラムで…

#2

投稿記事 by Mist » 16年前

ソース掲載する場合は規約にあるとおりpreタグを使用して字下げしてください。
ソースが読みにくいので解析しにくいです。

pooka

Re:住所録プログラムで…

#3

投稿記事 by pooka » 16年前

とりあえず文字化けを直してみました。
ざっと見ただけなので、他にもダメなところがあるかもしれません。
直したところはmain関数(あまり関係ないかも)、shinki関数、henkou関数です。
shinki関数は
switch(ans){
	case 'Y':
	case 'y':
		/* テンポラリデータの文字列をコピー */
		*data = temp;	//<--変更箇所
		printf("◆登録完了◆\n\n");
		cnt++;
		break;
	case 'N':
	case 'n':
		printf("---登録しませんでした---\n\n");
		break;		
	default:
		printf("---YかNを入力してください---\n\n\n");
		continue;
}
でhenkou関数は
switch(ans){	
	
	case 'Y':
	case 'y':
		for(i=no-1;i<cnt-1;i++){
			data = data[i+1];
		}
		*temp = afterdata;	//<--変更箇所
		printf( "◆変更完了◆\n\n");
		cnt--;
		break;
	case 'N':
	case 'n':
		printf("---変更しませんでした---\n\n");
		break;
	default:
		printf("---YかNを入力してください---\n\n\n");
		continue;
						
}

です。
実際の変更は添付ファイルを見てください。
henkou関数の
*temp = afterdata;
だと、変更していない他のメンバも変えてしまっていると思います。
他にもいい方法があると思いますが、
switch(koumoku){
	case 1:
		strcpy(temp->name,afterdata.name);
		break;
	case 2:
		strcpy(temp->yubin,afterdata.yubin);
		break;
	case 3:
		strcpy(temp->add,afterdata.add);
		break;
	case 4:
		strcpy(temp->tel,afterdata.tel);
		break;
	case 5:
		strcpy(temp->sei,afterdata.sei);
		break;
}

こんなかんじにswitch文を使って分けました。

追記
Label1:
	printf("変更する項目番号は?(99:終了)");
		・
		・(省略)
		・
	case 'N':
	case 'n':
		goto Label1;

のようにgoto文を使ってみるとか

ほのか

Re:住所録プログラムで…

#4

投稿記事 by ほのか » 16年前

回答ありがとうございます。
変更関数内でswitch文を使ってみたところ、他の住所登録者の名前も変更されてしまうのですが…;
どうしたら直るでしょうか??;

pooka

Re:住所録プログラムで…

#5

投稿記事 by pooka » 16年前

私が今回添付したファイルでも文字化けしますか?
今気付いたのですが、henkou関数内の
for(i=no-1;i<cnt-1;i++){
		data = data[i+1];
}

はどういう意図で書かれました?
sakujo関数にもあるようにずらしているみたいですが、henkou関数でも必要ですか?
なので添付したファイルはそこをコメントアウトしています。

後goto文を使って「変更する項目番号は?」のところに戻るようにしています。

もし直らなければもう一度ファイルを添付していただけますか?

ほのか

Re:住所録プログラムで…

#6

投稿記事 by ほのか » 16年前

回答ありがとうございます。
変更関数内の
for(i=no-1;i<cnt-1;i++){


}
の部分をなくしたら問題なくできました!

ありがとうございました!

閉鎖

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