入力した文字を小文字から大文字に
変えるプログラムで、コントロール+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;
No.6ベストアンサー
- 回答日時:
私のパソコンは 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でも同様のことができるのではないでしょうか?
wolvさんどうもありがとうございます。
Windows 98では、うまく動くようですね。
Windowsの機能についてまで、詳しく
かつ、わかりやすく教えていただき
参考になりました。
ありがとうございます。
今回はこれで、よいと
区切りをつけます。
何度も教えていただきありがとうございました。
No.5
- 回答日時:
> 連続して2度コントロール+zを
> 押さないととまらないのですが、
今,LSICをダウンロード; プログラムをWindows98でコンパイル・実行
してみましたが,
Ctrl-Z 2回ではとまりませんでした.
Ctrl-Z [ENTER]
でとまりました.
質問は書き間違えで,実は上の動作をしている,
ということでしょうか?
(学校の?)課題が
「Ctrl-Z を入力したらプログラムが停止するようにせよ」
というのだったら,
「キーボードから,Ctrl-Z [ENTER]と続けておしたら停止する」
という今の動作で問題ないと思いますよ.
MS-DOSでの入力の終了判定もそうですから.
この回答への補足
wolvさんたびたびありがとうございます。
また、LSICをダウンロードしてプログラムをWindows98で、
実行していただきありがとうございます。
Ctrl-Z [ENTER]すると、何も表示されない
状態になり、さらに、Ctrl-Z [ENTER]
を入力すると、プログラムが終了して
画面が消えるのです。
これを1回のCtrl-Z [ENTER]で、プログラム自体を
終了させたいのです。
No.4
- 回答日時:
こんにちは。
。さて、このプログラムの問題点は、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の勉強頑張ってください。
No.2
- 回答日時:
ごめんなさい,コントロール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で宣言したら,
一発でとまるようになりました.
この回答への補足
molvさん回答ありがとうございます。
>Ctrl-Zを押すと,mojiには何が入るんですか?
このあたりが、うまくscanfで機能していない
ようです。checkに-1が入ることを期待しているのですが、
入っていないようです。
check を intで宣言ましたが、結果はうまくいきませんでした。
No.1
- 回答日時:
sgi IRIX native C でコンパイルしたら,
一発でとまるバイナリ-ができましたよ.
使っているコンピューター・C・端末の種類などによって影響がでるのでは
ないでしょうか.
蛇足:
1.末尾の}がぬけてますね.
2.Enterの前に\nを入れたほうがいいように思います.
この回答への補足
wolvさん回答ありがとうございます。
なるほどOSなどの環境により違いが
生じるのですね。
自分の使用環境はOSWindows2000、
Visual C++6.0 Professionalです。
なにかよい解決方法はないのでしょうか?
蛇足は1は、貼り付けたら抜けたようです。
2はそうしたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数の値が勝手に変化する原因
-
ループのとめ方
-
ロトカ=ヴォルテラ方程式 をC...
-
【JAVA】数字をひし形に出力す...
-
JCLの基本について教えてください
-
c言語 至急お願い致します
-
ProC 固定SQLでNULLってどう表...
-
C言語のプログラム
-
カシオ fx-5800P 測量プログラ...
-
_dupenv_s関数でメモリリーク
-
fortran if文
-
3次関数を作るプログラム
-
Fortran90についての質問です。
-
Tiny Basicのプログラムです。。
-
0除算して、落ちるプログラムと...
-
正しい五十音順について
-
65536は2の何乗なのでしょうか?
-
あるプログラムのコマンドライ...
-
C++ で、「)」が必要 というエ...
-
VBAで仕様書は書きますか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
プログラミング
-
ruby
-
変数の値が勝手に変化する原因
-
JCLの基本について教えてください
-
Fortran90についての質問です。
-
fortran if文
-
3つの整数のうち奇数のみを表示...
-
Sublime Text 3でのFortranプロ...
-
Matlabについて質問2
-
ProC 固定SQLでNULLってどう表...
-
COBOLのピリオド
-
360度を超える角度
-
main関数終了時のreturnの意味は?
-
Visual Basic 三辺の長さ? ...
-
c言語です
-
C言語 バッファについて。
-
c言語のプログラミング 2つの整...
-
_dupenv_s関数でメモリリーク
-
N88basicを用いたGPIB制御
おすすめ情報