ページ 1 / 1
住所録プログラムで…
Posted: 2009年5月13日(水) 10:01
by ほのか
添付ファイルのソースをご覧頂きたく思います。
データを変更する関数内の「データを変更します。よろしいですか」で「N」を入力した際、「変更する項目番号は?」のところに戻りたいのですが、どうすれば戻れるでしょうか?
それと、変更データを入力したあと変更データ以外のデータが文字化けするのですが…
何か解決策があれば教えていただけると幸いです;
Re:住所録プログラムで…
Posted: 2009年5月13日(水) 10:40
by Mist
ソース掲載する場合は規約にあるとおりpreタグを使用して字下げしてください。
ソースが読みにくいので解析しにくいです。
Re:住所録プログラムで…
Posted: 2009年5月13日(水) 22:49
by pooka
とりあえず文字化けを直してみました。
ざっと見ただけなので、他にもダメなところがあるかもしれません。
直したところは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:住所録プログラムで…
Posted: 2009年5月14日(木) 09:42
by ほのか
回答ありがとうございます。
変更関数内でswitch文を使ってみたところ、他の住所登録者の名前も変更されてしまうのですが…;
どうしたら直るでしょうか??;
Re:住所録プログラムで…
Posted: 2009年5月14日(木) 11:12
by pooka
私が今回添付したファイルでも文字化けしますか?
今気付いたのですが、henkou関数内の
for(i=no-1;i<cnt-1;i++){
data = data[i+1];
}
はどういう意図で書かれました?
sakujo関数にもあるようにずらしているみたいですが、henkou関数でも必要ですか?
なので添付したファイルはそこをコメントアウトしています。
後goto文を使って「変更する項目番号は?」のところに戻るようにしています。
もし直らなければもう一度ファイルを添付していただけますか?
Re:住所録プログラムで…
Posted: 2009年5月14日(木) 11:30
by ほのか
回答ありがとうございます。
変更関数内の
for(i=no-1;i<cnt-1;i++){
・
・
}
の部分をなくしたら問題なくできました!
ありがとうございました!