You can always check the return value of scanf() as well to make sure it read the proper number of values.
And as mentioned before, the '&' is important. If you are gathering a string, you don't need the '&' operator but you do for char, float, int, etc...
char sStr[30];
char cChar;
int iVal = 0;
int iRet;
if ((iRet=scanf("%s %d %c", sStr, &iVal, &cChar ))!= 3) {
/* then scanf() didn't get a proper read */
}
And, flushing stdin is ok to do as well. You probably are just getting the '\n' from a previous return in there.
Hope that helps.
-Tyler