That's not completely true, it only returns EOF if none of the requested items can be matched due to end of file or another error. If it can match some items, but not all, before end of file is reached, it returns the number of successfully matched items, not EOF.
So scanf("%d%d%d",&a,&b,&c) will return 2, not EOF, if there are only two numbers left in the input. So if you want to process an input file, reading three numbers at a time, it is safer to use:
while(scanf("%d%d%d",&a,&b,&c)==3){
/* ... do your stuff ... */
}
than
while(scanf("%d%d%d",&a,&b,&c)!=EOF){
/* ... do your stuff ... */
}
because the second version depends on the correctness of the input.