知恵をお貸しくださいm(_ _)m

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

知恵をお貸しくださいm(_ _)m

#1

投稿記事 by C_Apprenticeship » 13年前

printf("名前を入力してください⇒");
scanf(" %s",name1);

printf("それでいいですか?Yes:1 No:2⇒");
scanf(" %d",&name2);

switch(name2){
case 1:
printf("ではstartします。\n");
break;
case 2:
printf("終了します\n");
break;
default:
printf("はじめからやり直してください\n");
break;
}

↑上記の記述で、case 2の場合は終了。defaultの場合は名前入力に戻るようなプログラムを書きたいのですが、
ネットで探したのですが、見つかりません。
本格的なものではなく、文字だけで進んでいくようなRPGのようなものを作っている途中です。
よろしければ知恵をお貸しくださいm(_ _)m

初級者
記事: 200
登録日時: 14年前

Re: 知恵をお貸しくださいm(_ _)m

#2

投稿記事 by 初級者 » 13年前

コード:

/*
 * 「それでいいですか」でNoを選んだときに「終了します」で
 * 本当にいいのかどうかは、やや疑問あり。
 * 入力した名前がよくなかったのだから、名前の再入力を求める方が
 * 妥当ではないのだろうか。
 */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char name1[20];
    int name2;

    do {
        printf("名前を入力してください⇒");
        scanf(" %s",name1);
        printf("それでいいですか?Yes:1 No:2⇒");
        scanf(" %d",&name2);

        switch (name2) {
        case 1:
            printf("ではstartします。\n");
            break;
        case 2:
            printf("終了します\n");
            exit(0);
        default:
            printf("はじめからやり直してください\n");
            break;
        }
    } while (name2 != 1 && name2 != 2);

    printf("何かの処理\n");
    return 0;
}

C_Apprenticeship

解答ありがとうございます

#3

投稿記事 by C_Apprenticeship » 13年前

解答ありがとうございます。
ご指摘の件確かにその通りでした。
何度も書き直しをしていたのに気づきませんでした…。
ありがとうございましたm(_ _)m

アバター
バグ
記事: 130
登録日時: 15年前
住所: 愛媛県
連絡を取る:

Re: 知恵をお貸しくださいm(_ _)m

#4

投稿記事 by バグ » 13年前

趣味の問題かもしんないけど、main関数に全部突っ込むと、あとで不具合があったり、改造したいときがきて見直す時に困ったことになりやすいので、細かく関数化しておいたほうが後で楽できるかもしれません・・・

コード:

#include <stdio.h>
#include <stdlib.h>

int setName (char* name)
{
	// 名前入力
	printf ("名前を入力してください⇒");
	scanf (" %s", name);

	// コマンド入力
	int cmd = 0;
	printf ("それでいいですか?Yes:1 No:2⇒");
	scanf (" %d", &cmd);

	// 入力値による分岐
	switch (cmd)
	{
	case 1:
		printf ("ではstartします。\n");
		return 1;
	case 2:
		printf ("終了します\n");
		exit (0);
	default:
		printf ("はじめからやり直してください\n");
		return 0;
	}
}

int main (void)
{
    char name[20];

	// 名前入力が完了するまで繰り返す
	// ※戻り値が0の場合は再入力指示なので、0以外が返った場合にのみループを抜ける
	while (!setName(name));

    printf ("何かの処理\n");
    return 0;
}

こんな感じにしておけば、名前入力部分に不具合があっても注目すべきはsetName関数の中だろうと容易に推測できますよね。

C_Apprenticeship

Re: 知恵をお貸しくださいm(_ _)m

#5

投稿記事 by C_Apprenticeship » 13年前

バグさん

解答ありがとうございます。
そのような方法があるのですね。
C言語はまだまだ見習いなので、int mainに全て入れるとうまくいくと思ってました。
勉強をもっとしてきます(^^;)
本当にありがとうございますm(_ _)m

閉鎖

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