Perlプログラムでのユーザー対応に関する問題

このQ&Aのポイント
  • Perlプログラムでユーザーのテキストファイル入力に対応する方法について相談です。
  • 現在、Perlプログラムを作成中で、テキストファイルの各単語の数を表示する機能を実装しています。
  • しかし、プログラム終了時にユーザーが継続するかどうかを選択する処理がうまく機能しません。
回答を見る
  • ベストアンサー

ユーザ-のインプットに対する対応

ユーザーにテキストファイル(英語で書かれているもの)の名前を入力してもらいPerlプログラムが、そのファイルの各単語の数を表示する というプログラムを作っています。 プログラム自体はできました。 ここで、 プログラム終了時に、 Do you want to continue? (c or q): と表示し、 ユーザーがcを入力したらまたプログラムを最初からスタート(c = continue) ユーザーがqを入力したら、プログラムを終了(q = quit) という処理を加えたいのです。 そこで次のようにプログラムを書いたらこのプロセスがうまくいきませんでした。(qを入力しても、プログラムがcontinueされます。) ↓ $continue = 'c'; while ($continue ne 'q') { テキストファイルを読み込むプログラム本体... ... ... ... print "Do you want to continue? (c or q)"; $continue = <STDIN>; ... ... } どこに問題があるのでしょうか? わかる方、アドバイスをいただけないでしょうか。 よろしくお願いします。

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

> $continue = <STDIN>; でユーザーからの入力を取ってきていますが、このままだと 改行が末尾にくっついています。 したがって、 > while ($continue ne 'q') ユーザーが q を入力したとしても改行がくっついてるせいで $continue eq 'q' が真になることはありません。 お手軽には読み込んだ後で chomp するとか。 $continue = <STDIN>; chomp $continue;

ilnmfay
質問者

お礼

回答ありがとうございます。 おかげさまで解決しました。 簡単にできるんですね...(苦笑)

関連するQ&A

  • orの前後の動詞

    Do you want to fly to Sydney or go by train? この文で、orの後のgoはorの前のwant toがgoにかかって do you want to fly to sydney or do you want to go by train to sydney? となっているという理解であってますか? しかし、もしそうだとすると do you want to go by fly to sydney or do you want to go by train to sydney? が正しいと思うのですが よろしくおねがいします

  • stdin,stdoutについて

    C言語を学び始めたものです stdin・stdoutがどのように機能するか分かりません またstdoutはどこに出力しているんですか #include <stdio.h> int main(void) { char ch; while(!feof(stdin)) { scanf("%c", &ch); if(!feof(stdin)) printf("%c", ch); } return 0; } このプログラムは「コンソール」入出力関数だけを使用しテキストファイルの内容を別のテキストファイルにコピーするプログラムだそうですがどのテキストファイルの内容をどこのテキストファイルにコピーしているんですか?stdin・stdoutの機能が全く分かりません。 どなたか分かる方、回答お願いします。

  • VBAのユーザーフォーム・・

    教えてください。 ユーザーフォームのテキストボックス・コンボボックスに入力した文字列をコマンドボタンを押したら、セルC1・B1に反映させたいのですが、できません。 このコマンドボタンには他のプログラムも入っており、同時にプログラムを実行したいのですが。

  • 入力した文字列をそのまま画面に出力するプログラム

    入力した文字列をそのまま画面に出力するプログラムを作成する。 ただし、何度でも入力可能とし、"q" を入力すると終了するようにする。 入力は半角に限定する。このとき、"quiz" や "quit" などの文字を入力しても終了しないようにするにはどうしたらよいのかを考える。 という課題に困っています。お願いします。

  • 翻訳をお願い致します!

    “I know something about addiction and I know how hard it is to overcome that, but the reality is what do you do if you're in a band and you want to continue making the living you have and you want to continue putting out new music and you're co-dependent of the needs and wants of someone who just doesn't want to do anything, who doesn't want to go anywhere. Someone that is just not there, is just not present.”

  • ユーザ追加のスクリプト作成について教えてください

    Linuxでスクリプトを作りたいのですが初めてでしてアドバイスいただきたいのですが。「ユーザを加え、パスワードの設定。その後確認画面として/etc/passwordと/etc/shadowにて新規に作成したユーザとパスワード”のみ”表示される」とゆうのが条件です。更にwhileを使ったユーザを作成したのちのy/nの応答でnを入力するまでは繰り返しユーザの追加が行えるようにしたいのですが。 途中まで教科書片手に作りましたが行き詰まってしまいました。 Variableに混乱しています。 CONTINUE=y while [ "$CONTINUE" != "n" ] do echo "adding a user" useradd -d /etc/shadow "$USERNAME" echo -e "type a user name" /c read USERNAME passwd "$PASSWORD" echo -e "type a password" /c read PASSWORD

  • ユーザー名の変更

    WINDOWSのセットアップで入力してしまったユーザー名(Cプログラムファイル名等にも出てくる)を変更するには購入時の状態に戻すリカバリをするしかないのでしょうか?

  • 選択疑問文のつくり方

       What do you want to drink? を選択疑問文にするには,どうすればよいのでしょうか? まず考えられるのは,    Which do you want to drink, tea or coffee? でしょうが,「I like coffee better.」という文にあるように,正確には,    Which do you want more to drink, tea or coffee? と,betterを加えるべきではないかという気がしてます。しかし,違和感があります。 正解を教えてください。<(_ _)>

  • 繰り返し条件について2

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=947566で質問させていただいたものです。新たな問題が発生してしまいした。 char jouken; do{ 処理 printf("--Press any key to exit(Press 'c' to continue)--"); scanf("%c",&jouken); }while(jouken=='c'); や、 do{ 処理 printf("--Press any key to exit(Press 'c' to continue)--"); }(getchar()=='c'); でプログラムを作ったら一回しか繰り返しが出来ないんです。1回目の処理をして、cを入力すれば、繰り返しになりますが、二回目の処理が終わると全ての処理が終わってしまいます(Press any key to continueとでます)。 何がいけないんでしょうか? MSVC++でc++で作成しています。

  • 暗号化文 3択させるためのプログラム 何で??

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

専門家に質問してみよう