[C] Как 'обнулить' буфер scanf()
А как ты распознаёшь, что двойка не нужна? А как это должна делать программа?
говорят, под виндой fflush(stdin) работает
двойка не нужна, потому что была в буфере еще в момент старого вызова
Читай строку, а потом делай sscanf.
Какой-такой буфер-муфер? Программа о нем знать не должна.
ну в случае scanf задача звучит так "сичтать только первый элемент каждой строки"
ну так и надо пропустить всё до начала следующей строки, а не буфер мифический искать
scanf; while(fgetc(stdin)!=EOF);
тебя не устраивает?
Тем, что ему нужно читать цифры в цикле. Несколько цифр, по одной, при нажатии enter'а.
scanf; while(fgetc(stdin)!=EOF);
Будет работать до скончания времён.
А если надо "принять" то, что будет введено после того, как приглашение на экране появится, нужен fflush.
while (getchar != '\n');
#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;
}

Оставить комментарий
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.