• ベストアンサー

push any key で終了する方法?

Cでプログラミングしています。 本当に基本的なことで申し訳ないのですが、 どうしても分からないので、 どなたかアドバイス又は ヒントをいただければ助かります。 printf("End of Program\n"); の後に、何かキーを押すとプログラムが終了するようにしたいのですが、現在では、どうしても 1文字入力してからリターンキーを押すという 2操作の方法しかプログラミングできません。 push any keyで終わるための関数について どなたかご教示お願いします。 scanf("%s",&ss); int ch = getchar(); exit(1)

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

  • ベストアンサー
  • qwer021
  • ベストアンサー率24% (70/281)
回答No.1

while(kbhit()==0){ } exit(1); 詳しくはkbhit()を調べてください

zico2
質問者

お礼

MFC7.0を使用しており、 conio.hをincludeすることで kbhitが使えたので、 一発でうまく行きました。 新しい関数を知ることができて、 また勉強になりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • akino4
  • ベストアンサー率18% (35/185)
回答No.3

kbhitで解決出来る環境ならkbhitのほうが楽でしょう(M$環境とか) が、kbhitがない環境もあるのでその時はべつの方法でやらなきゃならんです。 Cの標準ライブラリだけで組みたい場合はsetbufを呼び出して バッファリングをしないようにしてgetcharを呼び出す必要が ある環境が多いでしょう。 また、POSIX準拠でというならselect関数を利用するという手も有ります ほかにもあったかなぁ・・・

全文を見る
すると、全ての回答が全文表示されます。
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.2

こんばんは printf("End of Program\n"); getch(); exit(1); で良いと思います。 push any keyで終わるための関数について という事はどういう事でしょうか? 何かキーを押したら終わるという事と理解して良いですか? それともこのメッセージを出さなくてはいけないのでしょうか?

zico2
質問者

お礼

ご教示ありがとうございます。 今まで、getchar()では駄目だったのですが、 getch()にすると kbhitと同様にうまく行きました。 MFCのヘルプでは、 getcharしか出てきませんが、 使用上は問題ないようです。 現在、両者の違いをネットで検索しています。 大変勉強になりました。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • getchar()について 教えてください。

    visual studio 2010 professinalで以下のソースをデバッグして ”続行するには何かキーを押してください!”  で待機させたいのですが getchar()一個だけでは実現しません。   2個重ねるとOKです。どうしてでしょうか。  -------------- 以下のようにscanf関数がなければokということは突き止めたのですが、、、。  ご教授ください。 #include <stdio.h> int main(void) { int i; printf("なにか数字を入力してください。\n"); scanf("%d",&i); printf("今あなたが入力した数字は%dです。\n",i); printf("続行するには何かキーを押してください!"); getchar(); //getchar(); return 0; } ---------------------------------------------------------------- int main(void) { printf("続行するには何かキーを押してください!"); getchar();   return 0; }

  • C初心者です。どうかお助けを

    独習Cという本で独学中なのですが #include<stdio.h> int main() { int a,b; char ch; printf("実行したい演算は\n"); printf("加算(A)、減算(S)、乗算(M)、除算(D)のどれですか\n"); do{ printf("アルファベットの1文字を入力してください:"); ch=getchar(); while(getchar()!='\n'); }while(ch!='A' && ch!='S' && ch!='M' && ch!='D'); printf("\n"); printf("最初の数字を入力してください:"); scanf("%d",&a); printf("二つめの数字を入力してください:"); scanf("%d",&b); switch(ch){ case 'A': printf("%d",a+b); break; case 'B': printf("%d",a-b); break; case 'C': printf("%d",a*b); break; case 'D': if(b!=0)printf("%d",a/b); } return 0; } このプログラムでの14行目の while(getchar()!='\n');の必要性がわかりません。 どなたか有識者の方の回答をお願いします。

  • 繰り返し条件について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++で作成しています。

  • C言語なうなんですが、コンパイルまでは行ったんですが、セグメントエラー

    C言語なうなんですが、コンパイルまでは行ったんですが、セグメントエラーを起こしてしまいます。初心者なのでどこがおかしいのかもわかりませんので、ご指摘いただけるとありがたいです。 以下がそれでゲソ。始点と終点を指定して線を描いてもらうプログラミングを目指す。 #include <stdio.h> #include "../Glib/Glib.h" int main(void) { int x1,y1,x2,y2; printf("直線の始点の座標(x1,y1)のx1,y1を、間にカンマ','を入れて入力してください。"); scanf("%d" ,"%d" ,&x1 ,&y1); printf("直線の終点の座標(x2,y2)のx1,y1を、間にカンマ','を入れて入力してください。"); scanf("%d" ,"%d" ,&x2 ,&y2); G_init(); G_open(800,600,"Draw Line"); G_show(); G_black(); G_fillrect(0, 0, 800, 600); G_flush(); printf("Return Key を押してください。\n"); getchar(); G_white(); G_fillrect(0, 0, 800, 600); G_rgb(0,0,8); void G_line(int x1, int y1, int x2, int y2); G_flush(); printf("Return key を何回か押すと終了します。\n"); getchar(); getchar(); G_close(); return (0); }

  • cのプログラミング

    //ユーザーが入力した文字の個数をカウントする #include<stdio.h> int main() { char ch; int moji; int s_cunt=0, a_cunt=0, k_cunt=0; printf(\"文字を入力してください-->\"); do{ ch = getchar(); if(\'0\'<=ch && ch<=\'9\') moji = 1; else if(\'a\'<=ch && ch<=\'z\') moji = 2; switch(moji){ case 1: s_cunt++; break; case 2: a_cunt++; break; default: k_cunt++; break; } }while(ch != \'\\n\'); printf(\"数字の入力数:%d\\n\",s_cunt); printf(\"英字の入力数:%d\\n\",a_cunt); printf(\"区切りの入力数:%d\\n\",k_cunt); return 0; } 数字、英字、区切り文字をそれぞれリターンキーが押されるまでカウントして出力したいのですが上手く出力されません。このプログラミングは全然違いますか?

  • fflush(stdin)の使い方とprintf()関数getchar()関数の違いについて

    はじめまして。 現在c++を勉強し始めて1週間の初心者です。 fflush(stdin)について質問です。下記のプログラムで小文字入力したアルファベット1文字を大文字に変換して出力しています。方法(1)ではgetchar()関数とputchar()関数を使用していますがどうしてこの場合にはfflush(stdin)が必要となり、方法(2)のprintf()関数とscanf()関数を使用した場合はfflush(stdin)が必要ないのでしょうか?どなたか私のような初心者でも分かるように詳しく説明してもらいたいです。 何故かプログラムを書いているとprintf()とscanf()がよく混乱します。原因として、printf()を先に書く場合と、scanf()を先に書く場合が有るからだと思っているのですが、まだよく理屈の理解ができません。なので出来ればこれらの関数についても基本的な概念を教えていただきたいです。それと方法(2)では何故最後にscanf(%c):が無くても良いのかも良く理解できません。 どなたか是非とも回答宜しくお願いします。 #include <stdio> main void() { 方法(1) printf("\n文字を1つ入力してください:"); fflush(stdin);    char ch=getchar(); ch=ch-32; putchar(ch);    方法(2) printf("\n文字を1つ入力してください:") //fflush(stdin);必要なし???    char ch; scanf("%c",&ch); ch=ch-32; printf("%c",ch);    //scanf(%c):??? }

  • ダメだ・・・分からない。while文 無限ループ&’\n’エンター後無限ループ脱出

    忙しい中失礼します。 C言語超初心者のものです。while文での表示について質問があります。 下記の’プログラム内容’はEnterキーが押されるまで、 ’k’入力後 → Enterキー → ASCII value of k is 107.  ’t’入力後 → Enterキー → ASCII value of t is 116. ・・・ のように継続させ、 何もアルファベットを記入せず、’Enterキー’のみを押した場合はループから抜け、DOS画面を終了するようにしたいのですが、それが出来ません・・・。 ’k’入力後Enterキーを押すと、’Enter a character:’の表示がなされた後、’Press any key to continue・・・’となり画面を閉じなければいけなくなります。 while文の中の()内を何とかすれば、思い通りのプログラムになる、とは思うのですが、それが考え付きません。 申し訳ありませんが、よろしければそのヒントを下さい。多分すごく簡単なことだとは思うのですが、それが出来ません。 ※私個人の考えとしては、while文の中の(scanf("%c", &ch)&&(ch!='\n'))において、’&&(ch!='\n')’をプログラム文からなくせば、Enterキーを押さない限り(’k’入力後のEnterキー除く)、何度もパソコン側から尋ねられると思ったのですが・・・。・・・うまくいかず。 プログラミング内容: #include <stdio.h> #include <stdlib.h> int main() { char ch; printf("Enter a character:\n"); while(scanf("%c", &ch)&&(ch!='\n')) { printf("ASCII value of %c is %d.\n\n", ch, ch); printf("Enter a character:\n"); } system("PAUSE"); return 0; }

  • 長方形、円、三角形の計算するプログラムでエラーがでます

    タイトルの通りなんですがエラーがでます>< コンパイラはできたのですが、実行して二つ目の入力するとこで、入力したあと止まります。 どこがおかしいのでしょうか? #include <stdio.h> int sikaku(void); int en(void); int main(void) { char ch; int a,b; printf("円(A) 長方形(B) 三角形(C)\n"); printf("入力してください:"); ch = getche(); if(ch == 'C'){ printf("\n底辺を入力してください:"); scanf("%d ",a); printf("高さを入力してください:\n"); scanf("%d",b); printf("%dです",a * b); } else if(ch == 'B') sikaku(); else if(ch == 'A') en(); return 0; } int en(void) { int a; float f; printf("\n半径を入力してください:"); scanf("%d",a); printf("円周率を入力してください:"); scanf("%f",f); printf("%fです",a * a * f); return 0; } int sikaku(void) { int a,b; printf("\n縦を入力してください:"); scanf("%d",a); printf("横を入力してくさい:\n"); scanf("%d",b); printf("dです",a * b); return 0; }

  • cプログラム

    #include<stdio.h> /*Calc MAX of (a,b)*/ int max(int x,int y) { if(x>y) return x; else return y; } /*Calc n!*/ void fact(int n) { int i,ans; ans=1; for(i=n;i>=1;i--){ ans*=i; } printf("ans=%d\n",ans); } /*END*/ void end() { printf("Thanks\n"); exit(0); } /*Main*/ int main() { int key; int a,b,saidai; int n; while(1){ puts("\n=====Main MENU ====="); puts("1.......max(a,b)"); puts("2.......n!"); puts("9.......END\n"); printf("Input No(1,2,9)=?"); scanf("%d",&key); switch(key){ case 1: printf("Inputs:a,b?"); scanf("%d,%d",&a,&b); saidai=max(a,b); //Call max(a,b) printf("max(%d,%d)=%d\n",a,b,saidai); break; case 2: printf("Input:n?"); scanf("%d",&n); fact(n); break; case 9: end(); break; default: printf("!!!!!Miss Input_No!!!!!\n"); break; } } のプログラムなのですが、1の処理を行った場合max(a,b)の値が正しく表示されません どこを直せばいいでしょうか? return(0);

  • あるキーを押したら強制終了させるには。

    Cの初心者です。 ある文字列をスクロールさせるプログラムを作りました。 ソースは以下です。 *********************************************** #include<stdio.h> #include<string.h> void wait(long x) { int i; for(i=0;i<x;i++){/* do nothing */} } int main(void) { char name[]="Hello OK Wave"; int i; int len=strlen(name); int time=0; while(1){ printf("\r"); for(i=0;i<=len;i++){ if(time+i<=len){ printf("%c",name[time+i]); } else { printf("%c",name[time+i-len-1]); } } time++; if(time>len){time=0;} wait(1000000000); } return(0); } ********************************************* (ちなみにコンパイル時最後のリターン文が実行されないという警告が出ます) 一応これで目的の動作はしてくれるのですが、 これですとwhile(1)の中を延々と続けているのでプログラムを終了させるために いちいちコマンドプロンプトごと終了させなければいけません。 (ちなみにコマンドプロンプト自体のコマンドはよくわからないです) これですとなんだか嫌な感じなので、あるキー、たとえば'Q'を押したら プログラムが終了してくれるようなことが出来ないだろうかと思っています。 exit(1)を使うのかな?と思いましたがどのようにキーを押したかの判定などを すればよいのか悩んでいます。 どうかよろしくお願いいたします。