C语言,用Visual Studio2012编译,控制台窗口老是自动关闭。

为何用VS2012调试程序结尾使用getchar不起效果,用getch就可以。
在就是我下面这个程序,
运行后,显示两行文字,输入y,又显示两行文字(goto语句成功执行),但是这时我不论输入y还是n,窗口直接关闭了;
再运行,显示两行文字,输入n,等待键入(getch函数成功执行),窗口在有按键后关闭。

我想知道为何第一种运行中,执行了一次goto后,就不执行goto也不执行getch,就这么直接关闭了?

#include <stdio.h>
#include <conio.h>
int main(void)
{
char choice = 'n';
start:
printf("Hello world!\n");
printf("Do again? (y or n):\n");
scanf("%c",&choice);
if(choice == 'y')
goto start;
getch();
return 0;
}

运行后,显示两行文字,输入y,又显示两行文字(因为这时choice是y,所以goto语句成功执行),接下来scanf语句自动接收了上次的回车,不再执行goto,所以执行的是getch,这时我不论输入y还是n,窗口执行完getch直接关闭了;追问

那为何这个程序又能正常运行的?在最后输入y回车,第二轮再输入y回车依旧能goto start。

追答

没有正常啊

追问

终于被我调试发现了问题所在!
scanf里面%c之前加上一个空格,就正常了。不加空格,之前的回车就会被赋值进去。
真的是他**的神奇啊!

追答

。。。下面的那有个空格啊,我没看到,怎么我说也不是正常的。。。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答