アプリ版:「スタンプのみでお礼する」機能のリリースについて

忙しい中失礼します。下記のプログラムをいじり、「欲しい動作」を完成させたい、と思っています。
・・・が出来ないのです。 どうか教えて下さい。お願いします。 アドバイスでもいいです。お願いします。

欲しい動作
1.ユーザーに3択 [1ENCRYPT(暗号化)/2DECRYPT(標準化)/3QUIT(中止)] を尋ねる
2.ユーザーが1(ENCRYPT)を選択した場合、次に文章を入力し、

THE FOX BROWN エンターキー
WKH IRA EURZQ 表示[暗号化:元の文字から3文字ずらして表示]

というように表示させるプログラムを作成しています。

質問:ユーザーに尋ねる3択方法なのですが、どういったプログラムを組めば、1選択後にTHE・・・のような文章を入力後→エンターキー→暗号文といった動作が得られるのでしょうか?

私のプログラムでは、DOS画面上でどういうわけか 1 を選択した後、直ぐ(文章を入力することなく)、Press・・・continue となってしまいます。
何で??です?

どこをどういじれば、希望する動作になるのでしょうか? お願いします。

私のプログラムは以下です。
#include <stdio.h>
#include <stdlib.h>

int main()
{

void mystery(char);
char sen;
int num1;

printf("What do you want? Select the number\n");
printf(" 1.encrypt Cange decryption letters into encryption letters\n");
printf(" 2.decrypt Cange encryption letters into decryption letters\n");
printf(" 3.quit You don't need to write letters.\n");

printf("Enter the number: ");
scanf("%d", &num1);



if(num1 == 1)
{
printf("You select encrypt.\n");
printf("Enter your sentence: ");
mystery(sen);
}

else if(num1 == 2)
{
printf("You select decrypt.\n");
}

else
{
printf("You don't do anything.\n");
}

system("pause");
return 0;
}

void mystery(char sen)
{
char *upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int c, i;
int j=0;

while((c = getchar()) != '\n')
{
for(i = 0; upper[i]; i++)
{
if(c == upper[i])
{
c = upper[(i + 3) % 26];
break;
}
}
if(j<20)
putchar(c);
j++;
}

}

A 回答 (1件)

scanfとgetcahrは、文字を取り込む仕組みが違うのです。



scanf("%d", &num1);
で、数字の次に押した「enter」を
getchar()が読み込んでしまい、それが'\n'なので終わってしまうのです。

処理系に依存しますが、
scanf("%d", &num1);
の後で、
sen=getchar();
とかを行って「enter」を取り込んで捨ててしまえば
mystery(char sen)
が正常に動くと思います。
    • good
    • 0
この回答へのお礼

回答が遅れてしまい、申し訳ありません。
!そうなんですか!!
知りませんでした。
・・・試した結果出来ました。
早速 encryptも試してみます。
親切にありがとうございました。

お礼日時:2007/11/15 00:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!