scanf вернет 0 в вашем коде, если введенный символ не соответствует спецификации преобразования. Но следующий вызов для scanf возобновит поиск сразу после последнего преобразованного символа. Поэтому вы можете попробовать следующий код:
#include <stdio.h>
int arr[100];
int count=0;
int max=100;
int main(){
int i, input, ret;
char end;
printf("Enter integer values one by one, q to quit.\n");
for(i=0;i<max;i++)
{
ret = scanf("%d",&input);
if (!ret)
{
scanf("%c", &end);
if ( end == 'q')
break;
else
continue;
}
arr[i]=input;
count++;
}
printf("You entered %d values.\n",count);
return 0;
}
Делая это, вы можете убедиться, что элемент управления не выйдет из цикла, если вы не введете q и в массив скопированы только допустимые значения.