- ベストアンサー
C++で空Enterの入力を判断したい!!
空エンターで制御したい処理があるのですが、 char in[128]; gets(in); if(in[0]=='n') ↑の判定だとif文に中に入ってくれません。 入力なしでもOKな様にgetsを使ってみました。 (ちなみにこのinには値が入ることもあります。) enterの入力は改行コードが入るわけではないのでしょうか? その場合どのように判定すればいいのか教えてください! お願いします!!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- koko_u_
- ベストアンサー率18% (459/2509)
- yaemon_2006
- ベストアンサー率22% (50/220)
関連する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・C++・C#
- 改行のせい(?)で入力がうまくいきません
改行のせい(?)で入力がうまくいきません 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・C++・C#
- 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]); }
- ベストアンサー
- C・C++・C#
- 標準入力でEnter入力でも改行させない
標準入力上でできるゲームを作成しているのですが 特定のキー(数字)などは受け付けて、Enterのみ入力された場合は改行すらしない というようなことはできますか? 例えば ===== 1. Yes 2. No ===== のような画面がprintされているとき 1 or 2 + Enter の場合は入力を受けつけ次の画面へうつりますが Enterだけの場合は上の状態に留めたいです。 (一度改行した後上に戻るという処理でもいいです)
- ベストアンサー
- C・C++・C#
- 数値連続入力プログラムでの配列に格納される文字について
-------------------------------------------------------- #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」だけが格納されていました。 以上のプログラムに不備がないかも含めて、何故そうなるのか教えていただけると嬉しいです。
- ベストアンサー
- C・C++・C#
- 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 【回答上のご注意】 回答は、解答(答え)を求めています わたしはプログラマーではありません なので昭和的な「自分で考えろ」的なものは求めていません わからなければ答えない自由があなたにはあります 不明点があれば説明いたします
- 締切済み
- Python
- ワードカウンタというものを作るため、下のようなプログラムを本の通りにか
ワードカウンタというものを作るため、下のようなプログラムを本の通りにかきました。 #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・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; }
- ベストアンサー
- C・C++・C#
- 入力後、エンターで次に入力するセルに移動したい。
データ入力後、エンターで次に入力するセルに移動する方法等を教えて下さい。 質問1 次のように移動したいと思っております。 F12 → I12 → L12 → M12 → N12 → O12 → P12 → 改行して F13へ 質問2 その時、I列は平仮名入力で、入力出来るようにしたい。 御指導の程、宜しくお願い致します。
- ベストアンサー
- Windows XP
お礼
教えていただいたようにnull文字で判定したら空行の処理を行ってくれました。 '\n'は'\0'に変換されてしまうとは知りませんでした。 とても勉強になりました。これからは仕様もよく確認してみます。 ご回答ありがとうございました。