Frage

Irgendwo in der Zeit zurück habe ich einige C und C ++ in der Schule, aber ich habe nicht zu viele Aufmerksamkeit auf C ++ erhalten. Jetzt möchte ich einige Aufmerksamkeit auf C ++ zahlen, aber wenn ich die getch() Funktion bin mit, erhalte ich die Warnung von unten.

  

Warnung C4996: 'getch': Der POSIX-Name für diesen Artikel ist veraltet. Verwenden Sie stattdessen die konformen Namen ++ ISO C: _getch. Siehe Online-Hilfe.

Nun, ich bin mit VS 2005 Express, und ich weiß nicht, was über diese Warnung zu tun. Ich brauche getch() zu verwenden, nachdem ich eine Fehlermeldung oder etwas anderes printf(), die auf Tastendruck erforderlich ist.

Können Sie mir helfen mit, dass?

War es hilfreich?

Lösung

Microsoft beschlossen, den Namen ohne Unterstrich markieren als veraltet, weil diese Namen sind reserviert für den Programmierer zu wählen. Implementierung spezifische Erweiterungen sollten Namen beginnen mit einem Unterstrich im globalen Namespace verwenden, wenn sie mit dem C oder C ++ Standard-haften wollen - oder sie sollen sich als kombinierte Standard-konforme Umgebung, wie POSIX / ANSI / ISO C markieren, wo ein solches Funktion entspricht dann einer dieser Standards.

Lesen Sie diese Antwort über getcwd () auch für eine Erklärung von PJ Plauger, der Stoff sehr gut kennt, natürlich.

Wenn Sie daran interessiert sind nur für einige Schlüssel vom Benutzer eingegeben zu warten, gibt es wirklich keinen Grund, nicht getchar zu verwenden. Aber manchmal ist es nur mehr praktisch und bequem für den Benutzer _getch und Freunde zu verwenden. die sind nicht von der C- oder C ++ Norm festgelegt jedoch und damit die Portabilität des Programms beschränken. Denken Sie daran.

Andere Tipps

Wenn Sie in C ++, warum printf und getch? Erwägen Sie die Verwendung cout und cin.get statt.

Verwendung _getch () anstelle von getch ()

Warum brauchen Sie das? Warum nicht getchar() verwenden, wenn Sie ein einzelnes Zeichen erfassen müssen?

Wie der Fehler sagt, wird der Name getch() veraltet (wie eine Microsoft-spezifische Erweiterung war) und _getch() wird stattdessen empfohlen. Ich bin mir nicht sicher, wo POSIX hinein kommt; POSIX definiert nicht getch(), sondern umfasst getchar() , wie durch die angegebenen ISO-C-Standard (Seite 298, Entwurf verbunden, weil endgültiger Standard ist nicht kostenlos). Die Lösung wäre, wie vorgeschlagen zu tun und _getch() verwenden oder das Standard-C getchar() verwenden.

Sie können "std :: getc (stdin);" verwenden. Es funktioniert wie 'getch ();' in meinen Programmen. Ich denke, es ist eine gute Alternative für ‚getch ()‘ Wenn ich falsch bin, sag es mir.

#include <cstdio>

switch (std::getc(stdin)) {
    case 'a':   cout << 'a' << endl ; break;
    case 'b':   cout << 'b' << endl ; break;
    default:    cout << '$' << endl; break;
}

Es gibt 'a', wenn Sie Eingabe 'a' auf der Konsole.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top