C语言一个循环问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 12:30:04
do /*首先执行一次循环*/
{

printf("\n您想进行什么操作:\n输入1:进行解密。\n输入2:进行完全解密。\n输入3:进行加密。\n输入4:修改密码。\n输入5:查看操作记录。\n输入6:退出程序。\n");
scanf("%c",&mod); /*要求输入模式,mod为char类型*/
printf("\n");
switch(mod)
{
case '1':pass();break; /*输入1则运行加密函数*/
case '2':allpass();break; /*输入2则运行完全解密函数*/
case '3':lock();break; /*输入3则运行解密函数*/
case '4':cps();break; /*输入4则运行修改密码函数*/
case '5':dir();break; /*输入5则运行查看记录函数*/
case '6':break; /*输入6则不做任何动作*/
default:printf("输入错误,重新输入!");break;

%c以回车为结束,而回车并没有被读走,还留在键盘的缓冲区里。

注意scanf并不是从键盘里取数据而是从键盘缓冲区读,这时第二次循环其实读的是回车。

因此每次%c之后一定要用getchar()把回车读走,或者把%c换成%d或%s

楼上的回答很经典,要记住,很多人都犯这样的错误