Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

cin, ograniczenie do jednego znaku

Ostatnio zmodyfikowano 2015-01-01 20:44
Autor Wiadomość
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.
P-123770
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):
C/C++
#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 /* WIN32 */

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 ;)
P-123776
splendido
Temat założony przez niniejszego użytkownika
» 2015-01-01 20:44:04
Problem rozwiązany, zamykam temat.
P-123819
1 2 « 3 »
Poprzednia strona Strona 3 z 3