• ベストアンサー

C++で空Enterの入力を判断したい!!

空エンターで制御したい処理があるのですが、 char in[128]; gets(in); if(in[0]=='n') ↑の判定だとif文に中に入ってくれません。 入力なしでもOKな様にgetsを使ってみました。 (ちなみにこのinには値が入ることもあります。) enterの入力は改行コードが入るわけではないのでしょうか? その場合どのように判定すればいいのか教えてください! お願いします!!

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

ランタイムライブラリの仕様を確認しましょう VC++ですと getsで入力された文字列は最初の改行文字'\n'までがバッファに格納され '\n'を NULL文字の'\0'に変換する となっているようです 判定の方法として gets( buf ); if ( buf[0] == '\0' ) {   // 空行の場合の処理 } といった具合でしょう

akki-ya
質問者

お礼

教えていただいたようにnull文字で判定したら空行の処理を行ってくれました。 '\n'は'\0'に変換されてしまうとは知りませんでした。 とても勉強になりました。これからは仕様もよく確認してみます。 ご回答ありがとうございました。

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

その他の回答 (2)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>enterの入力は改行コードが入るわけではないのでしょうか? gets() は改行コードを保存しないようですね。 むしろ fgets() を使ったほうがよいでしょう。

akki-ya
質問者

お礼

改行コードは保存してくれないんですね・・。 ご回答ありがとうございました。

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

 if(in[0]=='\n')

akki-ya
質問者

補足

ご回答ありがとうございます。 すみません・・入力間違いで・・\nでやってます・・。

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

関連するQ&A

  • 空Enterの扱い方

    3つの整数を入力し、最大値を出力するプログラムを作りました。 最大値をさがすステップに入る前に、 「最大値を出力しますか?(y/n)」と聞いてy+Enterで実行するようになっています。この部分を、 y+Enter もしくは 空Enter で実行するにはどのように変更すればよいのでしょうか?大変お手数ですが、教えてください。 よろしくお願いします。 #include <stdio.h> #include <stdlib.h> int main(){ int i,max,max_no,a[3]; char YN[2]; printf("整数を3つ入力してください。\n"); for(i=0;i<3;i++){ printf("%d番目の整数: ",i+1); scanf("%d",&a[i]); } printf("最大値を出力しますか?(y/n):"); scanf("%s",YN); if(YN[0]=='y'){ printf("最大値をさがします。\n"); } else{ exit(0); } max_no=0; max=a[max_no]; for(i=1;i<3;i++){ if(a[i]>max){ max=a[i]; max_no=i; } } printf("最大値は %d 番目のデータ %d です。\n",max_no+1,max); return 0; }

  • 改行のせい(?)で入力がうまくいきません

    改行のせい(?)で入力がうまくいきません C言語でプログラムを組んでいるのですが 入力したいところが飛ばされてしまいます。 例えばプログラムの一部ですが int main(void) { char file_name[15]; char option[5]; while(1) { printf("0: Quit\n"); printf("1: Count the number of characters\n"); printf("2: Pass or fail\n"); printf("3: Prime numbers\n"); printf("Choose an option from above: "); scanf("%s", &option); if(option[0]=='1') { printf("Enter the external name of the file: "); gets(file_name); printf("The number of characters in the text file is %d.\n\n", countText(file_name)); continue; } else if (option[0]=='2') { passFail(); continue; のoptionで'1'と入力してリターンを押すと file_nameを入力する機会を与えてくれず、「ファイル名がない」と怒られて 終了してしまいます。 きっと改行のせいだと思うのですが、どうしていいのか分かりません。 最初はchar型にしてたのですがstring型にして 最初の一文字だけ見るようにしましたけどダメです。 getcharなんて使えないですよね…。 「改行 入力 LF」なんてキーワードで検索やってみたんですけど見つかりませんでした。 Windows XP, Visual C++ Version 5.0を使っています。 どなたか解決方法を教えて下さい。

  • Cプログラミング(文字入力)

    getsを使って文字を入力し、while文で一文字ずつ 表示させるプログラムをつくりたいのですが、 上手く動作しません。 間違っている点を指摘頂けないでしょうか。 宜しくお願いします。 char c[11]; int i; printf("文字列を入力してください(10文字以内)\n-->"); gets(c); while(i=0;c[i]=='\0';i++){ printf("%c\n",c[i]); }

  • 標準入力でEnter入力でも改行させない

    標準入力上でできるゲームを作成しているのですが 特定のキー(数字)などは受け付けて、Enterのみ入力された場合は改行すらしない というようなことはできますか? 例えば ===== 1. Yes 2. No ===== のような画面がprintされているとき 1 or 2 + Enter の場合は入力を受けつけ次の画面へうつりますが Enterだけの場合は上の状態に留めたいです。 (一度改行した後上に戻るという処理でもいいです)

  • getcの改行判定

    Windowsの構文解析でgetcを使ったプログラムを作ったのですが、 改行の判定に c = getc(fp_in); if(c == '\n'); とすると、 コマンドプロンプトに「コードは効果を持たない」と言われ、 コンパイルして実行してもif文は真にならないみたいです。 改行の判定を行うには正しくはどう記述すればいいのでしょうか?

  • 数値連続入力プログラムでの配列に格納される文字について

    -------------------------------------------------------- #include<stdio.h> int main(void) {    double sum=0.0;    double dt,x    int ret,n;    char ss[80];    ret=scanf("%lf",&dt);    while(1){       if(ret==1){          x=sum;          sum+=dt;          n=getchar();         if(n=='\n'){            printf("入力された数値=%f\n");            puts("");            sum=sum;         }         else{          printf("正しく入力してください\n");          puts("");          gets(ss);          sum=x;          dt=0.0;         }       }       else if(ret!=0){          gets(ss);          dt=0.0;          printf("正しく入力してください\n");          puts("");       }       else if(ret==EOF){          break;       }       ret=scanf("%lf",&dt);    }       printf("合計=%f\n",sum2);       return 0; } -------------------------------------------------------- 前回、「scanfの入力をgets関数で読み捨てることについて」というタイトルで数値連続加算のプログラムを作り、皆様からいろいろとアドバイスを受けた者です。 いろいろとプログラムを改良し、「Ctrl+Z」の入力でプログラムを終了しようとし、後、前のプログラムでは「10abc」などと打ち込んでも「10」は読み込んでしまうので、「10abc」などと打ち込んだ時点で、エラー表示をさせるようにしました。 ここで疑問なのですが、例えば、 ------- enter enter abc ------- と入力した場合、改行文字が配列ssに格納され、いろいろと複雑になってしまうのかと思ったのですが、ssにはしっかり「abc」だけが格納されていました。 以上のプログラムに不備がないかも含めて、何故そうなるのか教えていただけると嬉しいです。

  • Python:空集合の判定 == set():

    次のPythonコードはある練習問題の一部です fruitsという集合に対して、入力を1つづつしていくと、集合が空になります その空になったときの変数をprintしたら set() が出ました そこで if fruits == set(): というif文を判定用に入れたら、print("OK")に飛び OK が出ました 質問: 1)集合が空のとき if fruits == set(): で判定する書き方は、正しい(一般的)でしょうか? 2) if fruits == {}: ではジャッジされないのはなぜでしょうか ちなみにAIに1)が判定されてOKが出るのは、空集合は set()だから(そういう仕様だから)との回答が出ましたが、いまいち正しいのかわかりません #code fruits ={1,2,3,4,5,6} for i in range(6): fruit = int(input()) fruits.discard(fruit) # 要素が存在してもいなくても削除 #print(fruits) #最後に set() が主力 if fruits == set(): print('OK') #入力 1 2 3 4 5 6 【回答上のご注意】 回答は、解答(答え)を求めています わたしはプログラマーではありません なので昭和的な「自分で考えろ」的なものは求めていません わからなければ答えない自由があなたにはあります 不明点があれば説明いたします

  • ワードカウンタというものを作るため、下のようなプログラムを本の通りにか

    ワードカウンタというものを作るため、下のようなプログラムを本の通りにかきました。 #include <stdio.h> main() { char c = '\0'; char prevletter; int wordnum; int word_in; while(1) { wordnum = 0; word_in = 1; prevletter = '\0'; printf("文字列を入力してください。:"); while(1) { c = getchar(); if(c == '\n') { if(word_in) wordnum++; break; } prevletter = c; if(c == ' ' || c == '.') { if(word_in) { wordnum++; word_in = 0; } } else word_in = 1; } if(prevletter == '\0') break; printf("ワード数:%d\n", wordnum); } } ここで質問で、 1、なぜprevletterは必要でしょうか。 2、2つ目のwhile文でif(c == '\n')やif(c == ' ' || c == '.')では改行やスペース、ピリオドだけ入力されている場合しか処理していないと思うのですが、実際はどうなっているのでしょうか

  • ちょっとした疑問なんですが・・・(C言語)

    何度も質問してごめんなさい! ちょっとした疑問なんですが、下記のプログラム中の、 while(!feof(in)) { ch = fgetc(in); if(!feof(in)) fputc(~ch, out); } のコードで、「while(!feof(in))」でストリーム「in」結び付けられているファイルの終わりに達していれば繰り返し処理を終えるのは分かるのですが、 なぜ、インクリメントも無くファイルの終わりまで文字を調べ進めることができるのでしょうか? 未熟者の私ですが教えて頂けないでしょうか? 【プログラム例】 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *in, *out; unsigned char ch; if(argc!=3) { printf("使用法: <プログラム名> <入力ファイル名> " "<出力ファイル名>\n"); exit(1); } if((in = fopen(argv[1], "rb"))==NULL) { printf("入力ファイルを開くことができません\n"); exit(1); } if((out = fopen(argv[2], "wb"))==NULL) { printf("出力ファイルを開くことができません\n"); exit(1); } while(!feof(in)) { ch = fgetc(in); if(!feof(in)) fputc(~ch, out); } fclose(in); fclose(out); return 0; }

  • 入力後、エンターで次に入力するセルに移動したい。

    データ入力後、エンターで次に入力するセルに移動する方法等を教えて下さい。 質問1 次のように移動したいと思っております。      F12 → I12 → L12 → M12 → N12 → O12 → P12 →      改行して F13へ 質問2      その時、I列は平仮名入力で、入力出来るようにしたい。 御指導の程、宜しくお願い致します。

のしの印刷ができない
このQ&Aのポイント
  • PX-S5010を使っているが、のしプリント27でのしの印刷ができない
  • 印刷時に「ディスクトレイをセットしてください」というエラーメッセージが表示される
  • EPSON社製品に関する質問
回答を見る