The trap solution posted earlier is good for large loops, but cumbersome for the common case where you are just looping over a single or a few commands. In this case I recommend the following solution:

while whatever; do
command || break
done

This will exit the loop if command has a non-zero exit code, which will happen if it is interrupted. So unless command handles SIGINT, pressing ctrl-C will both stop the current command and exit the loop.

Edit: After reading your question more closely, I see that you want the current command to continue executing. In that case this solution does not apply.