cin, ograniczenie do jednego znaku
Ostatnio zmodyfikowano 2015-01-01 20:44
1aam2am1 |
» 2014-12-31 22:34:34 Wczytasz po prostu pierwszy znak i tyle. W żaden sposób przez cin tego nie zrobisz co kombinujesz. Chyba że napiszesz własną funkcje symulującą wprowadzanie danych z konsoli, która będzie kazała podać tylko jeden znak. Inaczej zasygnalizuje błąd i poprosi ponownie o podanie znaku. |
|
Kaikso |
» 2015-01-01 01:53:12 std::cin jest zdefiniowany w uproszczeniu jako std::ifstream który dziedziczy po std::istream, a więc można to zrobić tak std::cin.get( c ) . @C-Objective biblioteka conion.h nie jest standardowa, to biblioteka do obsługi konsoli Windowsa (cmd.exe). Ale masz rację to wygodniejsze rozwiązanie od wszystkich tu zaprezentowanych, ponieważ funkcja wczytuje jeden znak i kończy a nie czeka na klawisz "Enter". Kiedyś używałem takiego kodu (nie jest to kod mojego autorstwa): #include <stdio.h>
#ifndef WIN32 #include <termios.h>
#ifndef STDIN_FILENO #define STDIN_FILENO 0 #endif
int getch() { int c = '\0'; struct termios save_termios; struct termios ios; if( !isatty( STDIN_FILENO ) ) return EOF; if( tcgetattr( STDIN_FILENO, & save_termios ) < 0 ) return EOF; ios = save_termios; ios.c_lflag &= ~( ICANON | ECHO | ISIG ); ios.c_cc[ VMIN ] = 1; ios.c_cc[ VTIME ] = 0; if( tcsetattr( STDIN_FILENO, TCSANOW, & ios ) < 0 ) return EOF; if( read( STDIN_FILENO, & c, 1 ) != 1 ) c = EOF; tcsetattr( STDIN_FILENO, TCSANOW, & save_termios ); return c; }
#else #include <conio.h> #endif
I mamy uniwersalny kod który działa zarówno na Windowsie jak i Linux/Unix-ie (funkcja getch() :). @1aam2am1 Chyba że napiszesz własną funkcje symulującą wprowadzanie danych z konsoli |
I mamy kompromis ;) |
|
splendido Temat założony przez niniejszego użytkownika |
» 2015-01-01 20:44:04 Problem rozwiązany, zamykam temat. |
|
1 2 « 3 » |