В цикле for необходимо три выражения, которые разделяются точкой с запятой.
Первый - инициализатор, и он запускается за один раз до запуска цикла. Обычно инициализирует переменные цикла.
Второе является условием, и оно запускается сразу после инициализатора, а затем перед каждой последующей итерацией. Если это правда, операторы цикла выполняются. Если значение равно false, цикл завершен.
Третье - это выражение, которое запускается сразу после каждой итерации и непосредственно перед проверкой условия перед следующей итерацией. Обычно он выполняет цикл путем изменения переменной цикла.
Ваше условие stupid(i)==3,i<10
использует оператор запятой. Оператор запятой выполняется с каждой стороны, но возвращает только значение с правой стороны. Значение stupid(i)==3
полностью игнорируется. Условие stupid(i)==3 && i<10
выполняется только в том случае, если выполняются обе стороны.
Помните, что когда условие ложно, цикл заканчивается - итерация не просто пропускается, весь цикл заканчивается. Чтобы получить то, что вы хотите, используйте
for(i=0; i < 10; ++i) {
if (stupid(i)==3) {
printf("%d\n",i);
}
}
Это будет проходить через 0-9, но пропустите код, если stupid(i)
не равен 3.