6

ユーザー入力から直接データを読み取るプログラムをコーディングしていますが、キーボードの ESC ボタンが押されるまでどのようにすべてのデータを読み取ることができるのか疑問に思っていました。私はこのようなものだけを見つけました:

std::string line;
while (std::getline(std::cin, line))
{
    std::cout << line << std::endl;
}

ただし、押された ESC ボタンをキャッチして while ループを中断するためのポータブルな方法 (Linux/Windows) を追加する必要があります。これを行う方法?

編集:

私はこれを書きましたが、それでも - キーボードの ESC ボタンを押しても動作します:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    const int ESC=27;
    std::string line;
    bool moveOn = true;

    while (std::getline(std::cin, line) && moveOn)
    {
        std::cout << line << "\n";
        for(unsigned int i = 0; i < line.length(); i++)
        {
            if(line.at(i) == ESC)
            { 
                moveOn = false;
                break;

            }
        }
    }
    return 0;
}

EDIT2:

みんな、この解決策も機能しません。私のラインの最初のイワナを食べてしまいます!

#include <iostream>
#include <string>
using namespace std;

int main()
{
    const int ESC=27;
    char c;
    std::string line;
    bool moveOn = true;

    while (std::getline(std::cin, line) && moveOn)
    {
        std::cout << line << "\n";
        c = cin.get();
        if(c == ESC)
            break;

    }
    return 0;
}
4

5 に答える 5

7
int main() {
  string str = "";
  char ch;
  while ((ch = std::cin.get()) != 27) {
    str += ch;
  }

 cout << str;

return 0;
}

これは、エスケープ文字に遭遇するまで、入力を文字列に取り込みます

于 2013-01-08T12:56:32.517 に答える
1

これはエスケープキーの入力を取得するために機能することがわかりました.while関数で他の値を定義してリストすることもできます。

#include "stdafx.h"
#include <iostream>
#include <conio.h> 

#define ESCAPE 27

int main()
{
    while (1)
    {
        int c = 0;

        switch ((c = _getch()))
        {
        case ESCAPE:
            //insert action you what
            break;
        }
    }
    return 0;
}
于 2015-07-10T12:32:58.410 に答える
1

行を読み取った後、読み取ったすべての文字を調べて、エスケープ ASCII 値 (10 進数の 27) を探します。


これが私が意味することです:

while (std::getline(std::cin, line) && moveOn)
{
    std::cout << line << "\n";

    // Do whatever processing you need

    // Check for ESC
    bool got_esc = false;
    for (const auto c : line)
    {
        if (c == 27)
        {
            got_esc = true;
            break;
        }
    }

    if (got_esc)
        break;
}
于 2013-01-08T12:23:41.927 に答える
0

C ++のESC文字だけでなく、任意の言語のキーボードの他の文字についても、整数変数に入力した文字を読み取り、整数として出力することをお勧めします。

それか、ASCII 文字のリストをオンラインで検索してください。

これにより、キーのASCII値が得られ、それは単純です

if(foo==ASCIIval)
   break;

ESC 文字の場合、ASCII 値は 27 です。

于 2016-12-09T04:08:02.537 に答える
0
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    int number;
    char ch;

    bool loop=false;
    while(loop==false)
    {  cin>>number;
       cout<<number;
       cout<<"press enter to continue, escape to end"<<endl;
       ch=getch();
       if(ch==27)
       loop=true;
    }
    cout<<"loop terminated"<<endl;
    return 0;
}
于 2015-10-11T17:22:28.037 に答える