2017-09-03 5 views
0

Ich muss am Ende meiner Funktion, sobald die Benutzereingaben CTRL erkennen - X oder '/'. Ich weiß nicht, wie man eine Benutzereingabe von CTRL - X erkennen/überprüfen kann. Die Aufgabe, die mir gegeben heißt es: ‚Wenn Sie die Datei bearbeiten, werden Sie Daten Zeile für Zeile eingeben und wenn Sie fertig sind, werden Sie eingeben‚/‘oder CTRL +X zu verlassen.‘Wie Benutzereingabe CTRL-X in C++

Ich habe diesen Code bisher geschrieben. Ich bin ein Anfänger, also entschuldige meinen Code.

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string data; 
    int line_num=1; 
    ofstream editFile; 
    editFile.open("edit_test.txt"); 

    while(data!="/"){ //some kind of condition ORed with the condition already present in while loop? 
     cout<<line_num<<"> "; //I want to display line numbers every time the user presses enter 
     getline(cin, data); 
     if(data!="/"){ 
      editFile<<data<<endl; 
      line_num++; 
     } 
    } 

    editFile.close(); 
    return 0; 
} 
+0

https://stackoverflow.com/questions/1118957/c-how-to-simulate-an-eof – wally

+0

'GetAsyncKeystate' für Windows,' CGEventSourceFlagsState' für OSX. Was Linux betrifft, denke ich, dass XInput oder NCurses-Bibliothek es tun könnte. Sie sollten wirklich die genauen Hausaufgabenanforderungen bekanntgeben, wenn Sie möchten, dass wir helfen. Wir können Ihnen keine genaue Antwort geben, weil es Hausaufgaben ist, aber wir können immer noch helfen. Wir wissen nicht, was genau du fragst. Es klingt nicht gut für eine Schulaufgabe. – Brandon

+0

@ Dúthomhas Hoppla, tut mir leid. Ich meinte ncurses natürlich. :-P ... – user0042

Antwort

0

CTRL +X ist die gleiche wie Zeichencode 24 (seit X ist der 24. Buchstabe des Alphabets). Wenn keine Systeminterferenzen * auftreten, müssen Sie nur prüfen, ob der Zeichencode 24 im Eingang ist.

while (getline(std::cin, s)) 
{ 
    // Find ^C in s 
    auto n = s.find('\x18'); 
    if (n != s.npos) s = s.substr(0, n); 

    // process s normally here 

    // If ^C was found in s, we're done reading input from user 
    if (n != s.npos) break; 
} 

CTRL +X neigen keine speziellen Systemaktionen mit ihm verbunden haben, so sollten Sie keine Probleme haben, es als Input zu bekommen.