コンソールアプリの入力時に改行させたくない

このQ&Aのポイント
  • コンソールアプリでの入力時、改行させたくない方法について
回答を見る
  • ベストアンサー

コンソールアプリの入力時に改行させたくない

プログラミング初心者です。 Visal Studio 2010を使用してC++の勉強をしています。 コンソールアプリケーションにてstd::cinを使ってstring型かchar型変数への入力を受けさせます。 cinによる入力待ちの状態になったとき、何も入力しないでエンターキーを押すと、コンソールの画面上でカーソルが次の行へ移動し、まだ入力を待ち受けてくれます。 これを、「何も入力されてない状態でエンターキーが押されたら、変数へ何も代入しない or ヌルなどを代入して、終わり」という動作にすることはできないでしょうか? 例えるなら、getcharです。getcharならエンターを押すと改行コードを受け取ってそのまま終わってくれます。しかし、入力には複数の文字列を想定しているため、getcharは使いたくありません。 cin以外の入力でも構いませんので、何か良いアイディアがありましたらご教示ください。 以上になります。説明が下手で申し訳ありません。お読みいただきありがとうございました。 よろしくお願いいたします。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

2012にすると日本語になるのですが、自動翻訳のもので、しなくていいところまで訳されたりして、かえってわかりずらいんですよ。 http://msdn.microsoft.com/ja-jp/library/vstudio/deyay500%28v=vs.110%29.aspx で、メンバー関数を一つ一つ読んでいけば http://msdn.microsoft.com/ja-jp/library/vstudio/ykfk8bc0%28v=vs.110%29.aspx みたいな方法もある、ということです。

Mods-Rockers
質問者

お礼

std::getline(std::cin, s); で、できました!ありがとうございます!BAです!

その他の回答 (3)

noname#244325
noname#244325
回答No.4

#2ですがミスです。 Ctrl+Zですね、失礼しました。

Mods-Rockers
質問者

お礼

補足ありがとうございます。

noname#244325
noname#244325
回答No.2

#include<iostream> using namespace std; int main(){ int n; while(cin>>n){ //while(scanf("%d",&n)!=EOF)でも可 cout << "n=" << n << endl;  } return 0; } この時、入力時に(Ctrl+C)を押せば、入力終了でreturnが実行されます。(cinやscanfは正常に値が入力されると、返り値に1(条件式に使うと真)を吐き出す) Enterではないとダメならば、力になれません、すいません。

Mods-Rockers
質問者

お礼

ご回答ありがとうございます。 やはりEnterで実現したいと考えております。 アイデアありがとうございます。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

http://msdn.microsoft.com/ja-jp/library/vstudio/deyay500%28v=vs.100%29.aspx operator >> 以外にも、cinから読み出す方法があります。

Mods-Rockers
質問者

お礼

ご回答ありがとうございます。 う…英語。これはoperatorを使い>>を自分で多重定義する、ということでしょうか? ちょっと難度が高そうですが参考の記事をよく読ませていただき考えてみます。ありがとうございます。

関連するQ&A

  • コンソールからのメッセージボックスをアクティブに

    Win32APIについて教えてください。 #include <iostream> #include <windows.h> int main() {   int i=0;   char mes[20]; // std::cin >> i;   std::sprintf(mes, "%dが入力されました", i);   MessageBox(NULL, mes, "test", MB_OK);   return 0; } をコンソールから実行するとメッセージボックスがアクティブになるのですが、コメントの部分を外してコンソールからの入力を受け取ると、コンソールがアクティブになってメッセージボックスがコンソールの下に隠れてしまいます。メッセージボックスをアクティブにすることはできるのでしょうか。 宜しくお願いします(WinXP、bcc32を使用しています)。

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

    改行のせい(?)で入力がうまくいきません 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++の変数に流し込みたいです。 現在、C++で 次のように、 入力ストリームから1行分の文字列を読み込んで、 読み込んだ文字列を「cmd」に流し込んだ際に、 cmdに代入された文字列が「get」であると、 他のファイルで定義されている「doget」という関数が 実行されるようになっています。 ----------- std::string cmd; std::getline(cin, cmd); void nod::execute(const std::string& cmd) { std::stringstream ss(cmd); std::string command; ss >> command; if (command == "get") { std::string key = "baseball" ; std::string val = stand.doget(key); } } ----------- これを、 以下のように、 (1) C言語側にある「a」という変数にある値を C++側のkeyに流しこんで、 (2) また、C側にあるsign配列内の文字列を C++側の「cmd」に代入したいと思っています。 C側 --------- /* C側の「a」配列の値を、上記C++側の「key」に代入したい */ char a[] = "www.gehohogetest.jp"; /* 上記C++側の「cmd」変数に、C側の配列で定義されている"get"という文字列を代入したい */ char sign[]= "get"; --------- その場合、C側とC+側をどう記述すれば、 希望を叶えることが出来るでしょうか。 アドバイスいただけるとありがたいです。 以上どうぞ宜しくお願い致します。

  • アクセス 改行 Chr(10)とChr(13)

    アクセスのフォームの、Enter キー入力時動作を「フィールドに行を追加」にして、 改行できる状態にした時、エンターキー改行したら、 入力される文字はChr(10)とChr(13)のどちらになるのでしょうか?

  • 改行文字について

    #include<iostream> using namespace std; int main(void) { char c; while (cin.get(c)) if (c == '\n') cout << "[RET]\n"; else cout << c; return(0); } これのif (c == '\n')の改行文字と等しいとは何のことを指すのでしょうか? よろしくお願いします。

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

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

  • getchar,isalphaについて

    C言語を習いはじめてまもない者です。getcharとisalphaについて教えてください。  まず、getcharから。この関数は、キーボードから文字を一文字ずつ読み、読み出した文字を返す。といった働きをするそうですが、この関数を用いて、取り込んだ文字をなぜか、int型で宣言した変数に代入しています。(例:int aなどのaに取り込んだ文字を代入している。)なぜ、文字を取り込んでいるのに、intで宣言した変数に代入すのでしょうか?charで宣言した変数に代入しなくていいのですか?  次に、isalphaについてです。この関数は、変数に代入されている文字が数字か文字かを判断して、文字が入力されていると、0以外の値を返す関数だそうです。しかし、この関数も、変数の宣言がintです。なぜ、charではなくintで宣言するのでしょうか?

  • EXCEL2013セル左移動と改行

    質問タイトルについて教えて頂きたいです。 〇条件として ・EXCEL2013 ・エンターキー後のアクティブセルの移動方向を左に設定 ・シートを保護し、HとDの列のみ入力可能 ◇求める動作例として H3に入力しエンター ⇒ D3に移動、入力しエンター ⇒ H4に改行 H4に入力しエンター ⇒ D4に移動、入力しエンター ⇒ H5へ改行 … といった感じです。 ●困っている点として H3でエンターを押してもD3に移動しない D3でエンターを押してもH4に移動しない ※セルの移動先が右であれば、D3からH3へ移動後D4へ改行できる のですが、左移動だと不可能でしょうか? シートの保護を外した状態では ・H3からG3,F3と移動はします。 ・改行はしません。 よろしくお願います。

  • 標準入力から文字列配列に格納

    をしたいのです。 例えばchar string[100]; にscanf("%s",string); としたのですが、%sではスペースまでしか 読み込まないみたいです。 どうしたらよいでしょうか? お願いします。 c=getchar()も試そうとしましたが、よくわかりません。 標準入力を確定するにはcontrol+Dでしょうか? お願いします。

  • ASP C# 改行させたい

    マルチラインのテキストボックスに改行の入った文字列を入力して、そのテキストボックスをセッション変数に入れてからラベルに代入して表示すると改行がされないのですが、なにかいい方法があるのでしょうか?

専門家に質問してみよう