web-dev-qa-db-ja.com

新しい行を作成せずにcinを使用して変数を入力するにはどうすればよいですか?

cinを使用して変数を入力するときはいつでも、1つのヒットを入力すると、自動的に新しい行に移動します。改行せずにcinを使用する方法があるかどうか知りたいです。コマンドプロンプトの同じ行にcincoutを複数表示したいのですが。これは可能ですか?

14
Thomas Boxley

これにはcinまたはその他の標準入力を使用できません。しかし、あなたが望んでいる効果を得ることは確かに可能です。 Visual Studioを使用しているWindowsを使用しているので、たとえば _ getch を使用できます。次の空白まで読み取り、文字列に結果を格納する例を次に示します。

#include <conio.h> // for _getch

std::string get_Word()
{
    std::string Word;
    char c = _getch();
    while (!std::isspace(c))
    {
        Word.Push_back(c);
        std::cout << c;
        c = _getch();
    }
    std::cout << c;
    return Word;
}

それはあまり良くありません。たとえば、非印刷文字入力はあまりうまく処理されません。しかし、それはあなたにあなたが何をする必要があるかについての考えを与えるはずです。 Windows APIキーボード関数 にも興味があるかもしれません。

より多くのユーザーを対象とする場合は、 [〜#〜] sfml [〜#〜] または [〜#〜] sdl [ 〜#〜]

8

次のように入力する代わりに、スペースを入力に使用することもできます。

cin >> a >> b >> c;

そして入力であなたはタイプする

10 20 30

その後

a=10
b=20
c=30 
5
Amir

他の人が指摘したように、cinを使用してこれを行うことはできませんが、getchar()を使用して行うことはできます。あなたがしなければならないでしょう:

  1. getchar()を使用して各文字を個別に収集します(たとえば、読み込まれたときにstringの末尾に各文字を追加します)。
  2. 各文字を読み取った後、1つの変数の値の終わりに達したときを判断します(たとえば、intまたはdoubleの値を読み取っている場合、入力で1つ以上の' '文字を検出することによって) )、次に
  3. 変数のテキストの最後に達した場合は、作成した文字列を適切なタイプの変数に変換します(例:intdoubleなど)。 、その後
  4. 必要と思われる行にコンテンツを出力し、次に
  5. 読み込んでいる次の変数に進みます。

エラーを確実に処理することは複雑になるため、このためのコードは何も記述していませんが、使用できるアプローチを確認できます。

2
Simon

あなたがやりたいことをcinで達成できるとは思いません。実行できることは、選択した区切り文字を使用して、すべての入力を1行で記述し、入力文字列を解析することです。

1
SamiHuutoniemi

それは不可能。 @Bo Perssonを引用すると、これはC++によって制御されるものではなく、コンソールウィンドウです。

0
Thomas Boxley

gotoxyステートメントを使用してください。たとえば、Enterキーを押して、同じ行に値を入力できます。 3 * 3行列の入力で:

'#include<iostream.h>
#include<conio.h>
void main()
{clrscr();
int a[20][20],x,y;
cout<<"Enter the matrix:\n ";
for(int r=2;r<7;r+=2)
for(int c=2;c<7;c+=2)
{gotoxy(c,r);
cin>>a[r][c];
}
getch();}'
0
user3394217

コメントはできませんが、整数の間にスペースを入れると、期待どおりの効果が得られます。これはcinでも機能します。

int a, b, c;
cin>>a; cin>>b; cin>>c;

値を10 20 30として入力すると、それぞれa、b、cに格納されます。

0
Aman Thakkar