C语言中dummy变量的作用:移除后程序为何直接退出?
问题解析:dummy变量的作用及移除后程序异常的原因
原代码
int main () { char c; int choice,dummy; do{ printf("1. Print Hello\n2. Print World\n3. Exit\n"); scanf("%d",&choice); switch(choice) { case 1 : printf("Hello\n"); break; case 2: printf("World\n"); break; case 3: exit(0); break; default: printf("please enter valid choice\n"); } printf("do you want to enter more?"); scanf("%d",&dummy); scanf("%c",&c); }while(c=='y'); }
dummy变量的作用
这个dummy变量是用来处理输入缓冲区残留换行符的,但实现逻辑很不合理。
当你用scanf("%d", &choice)输入选项时,输入内容是「数字+回车」,scanf只会读取数字部分,回车对应的换行符\n会留在输入缓冲区里。原代码里的scanf("%d", &dummy)试图通过读取整数的方式跳过这个换行符,但这是错误的处理方式:如果用户输入的不是数字,这行代码会直接失效,反而引发新问题。
移除后程序直接退出的原因
删掉dummy相关代码后,程序执行到scanf("%c", &c)时,会直接读取缓冲区里残留的换行符,把变量c赋值为'\n'。而循环的终止条件是while(c=='y'),'\n'不等于'y',所以循环直接结束,程序也就退出了,根本没给你输入字符的机会。
正确的解决方式
不需要用dummy变量,只需要把读取字符的代码改成scanf(" %c", &c)——注意%c前面的空格,它会自动跳过输入缓冲区里所有空白字符(包括换行、空格、制表符),这样就能正确读取用户输入的y或其他字符了。
内容的提问来源于stack exchange,提问作者Imtiaz Ali
相关产品推荐
相关产品推荐

