nirvimel: значит scanf должен считать integer, а если я введу текст например, он должен дать возможность повтороного ввода. Прошу прощения за очень непонятный вопрос.
что вы подразумеваете под "зацикливается"?
первый вариант действительно после неправильного ввода начинает бесконечно писать "number", но второй вариант вполне адекватно спрашивает number, пока не получит корректный номер. если вам нужно спросить только один раз, уберите while, а условие var != 1 используйте далее для определения корректности ввода (при вводе число, var будет равен 1)
MajorTom69: запускал, у меня всё ок, ждёт пользовательского ввода. Компилирую в MSVS 2008.
На Linux и в других компиляторах это может не работать, поэтому попробуйте заменить fflush на свой:
void my_flush()
{
int c;
while ((c = getchar()) != EOF) { }
}
15432: спасибо, правда я его попробовал и он не останавливался, ну тоесть я ввел букву или число и дальше ничего не происходило, так что я немного изменил код, видать из-за "\n" проблема была
#include <stdio.h>
void my_flush(void)
{
int c;
do {
c = getchar();
} while (c != EOF && c != '\n');
}
но вопрос появился, я правильно понимаю, что getchar передавая что-то из потока ввода очищает этот поток ввода автоматически?
MajorTom69: каждый getchar "забирает" из входящего потока букву. scanf же забирает символы только если они подходят под параметры парсинга, вот и зацикливается код (scanf бесконечно пытается распарсить ввод, но там не цифра).
странно, что не останавливается, он должен считать всё до конца потока, тем самым очистив его. EOF эквивалентен числу -1, поэтому 'c' должен быть int.