читать определенное количество символов из стандартного ввода - PullRequest
1 голос
/ 19 мая 2011

HI

Я пишу программу, которая действует как сервер и имеет возможность взаимодействовать с пользователем через терминал.если я читаю со стандартного ввода, я хочу до 140 символов.если пользователь вводит более 140, я хотел бы взять только первые 140 символов и игнорировать остальные.

я пытаюсь что-то вроде следующего кода:

struct timeval timeout;
fd_set readings;
char buf[140];


while (1) {
    timeout.tv_sec = 15;
    timeout.tv_usec = 0;
    FD_ZERO(&readings);
    FD_SET(STDIN_FILENO,&readings);

    int rv = select(STDIN_FILENO+1,&readings,NULL,NULL,&timeout);
    if (rv<0) {
        cout << "ERROR select\n";
        exit(1);
    }
    if (rv==0) {
        cout << "Still Waiting...\n";
    }
    else {
        cout << "A key was pressed\n";
        if (FD_ISSET(STDIN_FILENO,&readings)) {
            int num = read(STDIN_FILENO,&buf,140);
            buf[num]='\0';
            cout << buf << endl;
        }
    }
}

проблема в том, когдаЯ ввожу более 140 символов, первые 140 символов печатаются, но затем read () читает остальные данные в следующей итерации и печатает их.Как очистить стандартный ввод, чтобы остальные данные были проигнорированы на следующей итерации?

спасибо !!

Ответы [ 4 ]

2 голосов
/ 19 мая 2011

Возможно, вы могли бы изменить свое решение для использования readsome () .

char c[140];
cin.readsome(&c[0], 140);

Или сохранить то, что у вас есть, и использовать игнорировать

1 голос
/ 19 мая 2011

Практически единственный выбор - прочитать символы и выбросить их, пока не будет достигнут конец строки.

0 голосов
/ 19 мая 2011

Почему бы вам не сделать что-то подобное:

char buf[256];//what ever
...
int num = read(STDIN_FILENO,&buf,256);
if (num > 140) num = 140;
buf[num]='\0';
cout << buf << endl;
0 голосов
/ 19 мая 2011

Считайте весь введенный текст в указателе, затем извлеките первые 140 символов, а затем снова удалите указатель, чтобы быть готовым к следующему запросу.

...