Ctrl-C conventionally does not kill shell-like things. This is, technically, of course because of cooperation of those shell-like things and their handling of SIGINT, but that's not actually relevant.
The following things (off the top of my head, and quickly verified) all handle Ctrl-C so that it kills only the current command and not the containing process:
The following things (off the top of my head, and quickly verified) all handle Ctrl-C so that it kills only the current command and not the containing process:
bash, zsh, csh, ksh, mail, gnuplot, gdb, psql, vsql, python (interactive), ghci
While I object to captive user interfaces in general, if you're going to have one then handling ctrl-c inside it is the right thing to do.