הסבר,
ברגע שאתה צריך לקבל גם תווים וגם מספרים, כדאי שתעבוד לקליטה CHAR במקום INT, כך תוכל לקבל גם מספרים. זה אומר, שבמקום להתחייס למספר 1 כ-1, אתה צריך לחפש אותו כ'1', שאומר התו '1' שערכו אם אני לא טועה הוא 49 בASCII. הנה, שיניתי את הקוד כך שהוא יוכל לקבל תווים, ויבדוק גם אם נלחץ התו '@'. שים לב שהחלפתי את כל המספרים בCASEים וגם בתנאי של הWHILE לתווים, כלומר הוספתי להם גרשיים בודדים:
int main(void) { char selection = 0; do { scanf("%c",&selection); switch(selection) { case '1': printf("1"); break; case '2': printf("2"); break; case '@': //...... case '8': break; default: printf("Range error - %c\n",selection); break; } } while (selection != '8'); return 0; }