You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:30:07