Visual Studio中C++欧几里得算法Debug正常但EXE运行中途退出
解决EXE运行后输入数字就退出的问题
问题根源
不是temp2 = n;的问题,核心原因是输入缓冲区残留的换行符:
当你用scanf_s输入数字后按回车,这个回车对应的换行符\n会留在输入缓冲区里。scanf_s只读取了你输入的数字,没管这个换行符。后面的getchar()会直接读取这个残留的换行符,程序就误以为你已经按了回车,直接退出,根本没等你手动输入。
而VS调试时,IDE会在程序结束后自动帮你暂停窗口,所以你看不到这个问题,直接双击EXE运行就会暴露。
简单解决方案
给你几个适合新手的解决办法,选一个就行:
方法1:清空输入缓冲区(VS专用)
在getchar();之前加一行fflush(stdin);,强制清空输入缓冲区里的残留内容://...前面的代码不变 printf("Der groesster gemeinsamer Teiler von %d und %d betraegt %d",temp,temp2,erg); fflush(stdin); // 清空输入缓冲区 getchar(); return 0;方法2:用两次getchar()
第一个getchar()吃掉残留的换行符,第二个等你输入://...前面的代码不变 printf("Der groesster gemeinsamer Teiler von %d und %d betraegt %d",temp,temp2,erg); getchar(); // 吃掉残留的换行 getchar(); // 等待用户输入 return 0;方法3:更稳妥的清空方式
用循环把缓冲区里所有残留字符(包括换行)都吃掉,再等待输入://...前面的代码不变 printf("Der groesster gemeinsamer Teiler von %d und %d betraegt %d",temp,temp2,erg); // 清空缓冲区里的所有残留字符 while ((getchar()) != '\n'); getchar(); // 等待用户输入 return 0;
额外提示
你的代码里erg变量如果用户输入的n一开始是0的话,会出现未初始化的问题,不过作业里应该是输入正整数,暂时可以先不管,以后写代码记得给变量初始值哦。
内容的提问来源于stack exchange,提问作者ElTacoSalamanca
相关产品推荐
相关产品推荐

