解決済み

ループのとめ方

  • 暇なときにでも
  • 質問No.263526
  • 閲覧数216
  • ありがとう数1
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 62% (23/37)

入力した文字を小文字から大文字に
変えるプログラムで、コントロール+z
で、ループを抜け出すようにしたい。
連続して2度コントロール+zを
押さないととまらないのですが、
どのようにすれば、1度コントロール+zを
押すだけで、終了できるのでしょうか?
何かアドバイスをお願いします。

========================================

#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(void)
{
char moji[50],check=0;
int i,len;

while(check !=EOF){
 printf("Enter : ");
 check = scanf("%s",moji);
 len=strlen(moji);
 if(check!=EOF){
  printf("Display : ");
  for(i=0;i<len;i++){
    printf("%c",toupper(moji[i]));
  }
}
}

return 0;
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.6
レベル13

ベストアンサー率 37% (376/1001)

私のパソコンは Windows 98 なので,
hgdreamさんの例とは違うかもしれませんが,

Explorerのウィンドウの中にある
コンパイル・リンクの結果できた実行ファイルのアイコン
をダブルクリックして起動した場合,
MS-DOSのウィンドウが開き,
その中で作成したプログラムが動きます.

1度めの Ctrl-zでプログラムは止まっています.
私の場合は,画面の表示はそのままですが,
MS-DOSコマンド等はうけつけません.

さらに何かキーを入力すると,
ウィンドウを閉じてもいいかどうか確認するメッセージがでます.

-------------------------------------------------------------

そこで,
hgdreamさんの場合も,
- プログラムは既に希望どおりのものができている.
- 2度めの Ctrl-zでウィンドウが閉じるのは,Windowsの機能の一部.
ではないかと思います.

-------------------------------------------------------------

参考:

Windows 98 の場合は,
実行ファイルのアイコンの設定で,
自動的にウィンドウが閉じるようにできます.
つまり,Ctrl-Z(+ENTER)一回で,
プログラムが終了し,ウィンドウが閉じます.

設定方法:
Explorerのウィンドウの中にある実行ファイルのアイコンを右クリックし,
出たメニューから,「プロパティ(R)」を選び,
開いたダイアログの「プログラム」タブ内の
「プログラム終了時にウィンドウを閉じる(X)」チェックボックスに
チェックを入れておくと,
プログラム終了時に自動的にウィンドウが閉じます.

Windows 2000でも同様のことができるのではないでしょうか?
お礼コメント
hgdream

お礼率 62% (23/37)

wolvさんどうもありがとうございます。
Windows 98では、うまく動くようですね。
Windowsの機能についてまで、詳しく
かつ、わかりやすく教えていただき
参考になりました。
ありがとうございます。
今回はこれで、よいと
区切りをつけます。
何度も教えていただきありがとうございました。
投稿日時 - 2002-05-05 22:32:28
OKWAVE 20th Be MORE ありがとうをカタチに

その他の回答 (全5件)

  • 回答No.1
レベル13

ベストアンサー率 37% (376/1001)

sgi IRIX native C でコンパイルしたら,
一発でとまるバイナリ-ができましたよ.

使っているコンピューター・C・端末の種類などによって影響がでるのでは
ないでしょうか.

蛇足:
1.末尾の}がぬけてますね.
2.Enterの前に\nを入れたほうがいいように思います.
補足コメント
hgdream

お礼率 62% (23/37)

wolvさん回答ありがとうございます。
なるほどOSなどの環境により違いが
生じるのですね。

自分の使用環境はOSWindows2000、
Visual C++6.0 Professionalです。

なにかよい解決方法はないのでしょうか?

蛇足は1は、貼り付けたら抜けたようです。
2はそうしたいと思います。
ありがとうございました。
投稿日時 - 2002-05-04 13:43:18
  • 回答No.2
レベル13

ベストアンサー率 37% (376/1001)

ごめんなさい,コントロールZで
実行が中断されたのは,UNIXの(cshの?)仕様でした.

check = scanf("%s",moji);

でCtrl-Zを押すと,mojiには何が入るんですか?
checkには何が入るんですか? 確認しましたか?

printf("EOF:%d\n",EOF);

printf("check: %d\n", check);
というコードを埋め込んで実行したところ,
EOFは-1でしたが,
終了文字(UNIXではCtrl-D)を押したときのcheckの値は255でしたよ.

char 型に-1を代入しても-1として認識されないということではないですか?

check を intで宣言したら,
一発でとまるようになりました.
補足コメント
hgdream

お礼率 62% (23/37)

molvさん回答ありがとうございます。

>Ctrl-Zを押すと,mojiには何が入るんですか?
このあたりが、うまくscanfで機能していない
ようです。checkに-1が入ることを期待しているのですが、
入っていないようです。

check を intで宣言ましたが、結果はうまくいきませんでした。
投稿日時 - 2002-05-04 14:22:48
  • 回答No.3
レベル13

ベストアンサー率 37% (376/1001)

Ctrl-Zにこだわりますか?
そうでないなら,文字列の長さが0だったらとまる
などとすれば実現できそうです.

間違ってとめてしまうのを避けるならば,
プログラム停止前に確認メッセージを出し,
リターン以外の文字(y)などで本当停止
するようにすればいいと思います.
補足コメント
hgdream

お礼率 62% (23/37)

wolvさん、下で、名前を書き間違えてしまいました。
すみません。

>Ctrl-Zにこだわりますか?
課題がCtrl-Zで、とまるようにとあるのです。
投稿日時 - 2002-05-04 23:17:12
  • 回答No.4
レベル11

ベストアンサー率 29% (109/371)

こんにちは。。
さて、このプログラムの問題点は、scanf にあると思います。
実際、1回の入力で終了させるためには、scanf (CR を待つ) のではなく、_getch などで、1文字ずつ入力をしてチェックする方法が一般的です。
_getch の戻り値を判定して、すぐに終了することができますが、画面インターフェースが変わってしまうので、サンプルは少し違います。
特に戻り値EOFがキーコードになってしまうことです。

===============================
#include <stdio.h>
#include <ctype.h>
#include <conio.h>

#defineEOF0x1a

int main(void)
{
char check=0;

while(true){
check = _getche();
if(check!=EOF){
printf("%c",toupper(check));
} else {
break;
}
}

return 0;
}
===============================

表示も違いますが、あとは作れますよね。
Cの勉強頑張ってください。
補足コメント
hgdream

お礼率 62% (23/37)

fuji1さん回答ありがとうございます。
参考になしましたが、
1文字ずつ入力で、文字列を扱うのがなかなか難しい。
投稿日時 - 2002-05-04 23:20:18
  • 回答No.5
レベル13

ベストアンサー率 37% (376/1001)

> 連続して2度コントロール+zを
> 押さないととまらないのですが、

今,LSICをダウンロード; プログラムをWindows98でコンパイル・実行
してみましたが,
Ctrl-Z 2回ではとまりませんでした.
Ctrl-Z [ENTER]
でとまりました.
質問は書き間違えで,実は上の動作をしている,
ということでしょうか?

(学校の?)課題が
「Ctrl-Z を入力したらプログラムが停止するようにせよ」
というのだったら,
「キーボードから,Ctrl-Z [ENTER]と続けておしたら停止する」
という今の動作で問題ないと思いますよ.

MS-DOSでの入力の終了判定もそうですから.
補足コメント
hgdream

お礼率 62% (23/37)

wolvさんたびたびありがとうございます。
また、LSICをダウンロードしてプログラムをWindows98で、
実行していただきありがとうございます。

Ctrl-Z [ENTER]すると、何も表示されない
状態になり、さらに、Ctrl-Z [ENTER]
を入力すると、プログラムが終了して
画面が消えるのです。

これを1回のCtrl-Z [ENTER]で、プログラム自体を
終了させたいのです。
投稿日時 - 2002-05-05 20:18:24
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ