[C] Как 'обнулить' буфер scanf()

Greezlik

Если в теле цикла вызвать: scanf("%d", n а ввести, например: "1 2", то в n запишется 1, зато при том же вызове в следующем теле в n автоматически запишется двойка, и программа без остановки пойдёт дальше.
Что ещё добавить в цикл, что бы не нужная 2 забывалась?
Компилятор:
C:\Program Files\Microsoft Visual C++ Toolkit 2003>cl /?
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

evgen5555

А как ты распознаёшь, что двойка не нужна? А как это должна делать программа?

otets-mihail

говорят, под виндой fflush(stdin) работает

otets-mihail

двойка не нужна, потому что была в буфере еще в момент старого вызова

kokoc88

Читай строку, а потом делай sscanf.

evgen5555

Какой-такой буфер-муфер? Программа о нем знать не должна.

otets-mihail

ну в случае scanf задача звучит так "сичтать только первый элемент каждой строки"

Marinavo_0507

ну так и надо пропустить всё до начала следующей строки, а не буфер мифический искать

Sharp

а
 scanf; while(fgetc(stdin)!=EOF);  

тебя не устраивает?

kokoc88

Тем, что ему нужно читать цифры в цикле. Несколько цифр, по одной, при нажатии enter'а.

klyv

scanf; while(fgetc(stdin)!=EOF);

Будет работать до скончания времён.
А если надо "принять" то, что будет введено после того, как приглашение на экране появится, нужен fflush.

Olenenok

while (getchar != '\n');  

vall

#include <stdio.h>
#include <fcntl.h>
int main {
int fd;
fd = fileno(stdin);
char b[1];
while (1) {
fcntl(fd, F_SETFL, fcntl(0, F_GETFL, 0) & ~O_NONBLOCK);
read(fd,b,1);
printf("!%c\n", b[0]);
if (b[0] == 'q') break;
fcntl(fd, F_SETFL, fcntl(0, F_GETFL, 0) | O_NONBLOCK);
while (read(fd,b,1) == 1) {
printf(">%c\n", b[0]);
}
}
return 0;
}
Оставить комментарий
Имя или ник:
Комментарий: