我解决了一个问题,不知道背后的原因

问题描述

我做了一个程序,将数字转换为罗马数字,当.exe文件不起作用时,我打算将其显示给我的一个朋友。它询问用户要输入哪个号码,然后他将程序关闭。我不明白的是为什么它在DevC ++上编译后就可以工作,但是与.exe却有不同的行为

我发现那里几乎没有解决方案,而对我有用的解决方案是添加一个

int a;
cin>>a;

返回零之前。现在可以了。我不明白控制台如何不执行该操作。我将代码在这里


#include <iostream>
using namespace std;

int main(){
    int numero,unidades,decenas,centenas,millares;
    int comprobante;
    
    cout<<"Este programa Traduce un numero de 4 cifras a numeros romanos.\nDigite un numero de 
    maximo cuatro cifras: ";
    cin>>numero;
    
     
    unidades= numero%10; 
    numero /= 10; 
    decenas= numero%10; 
    numero/=10; 
    centenas= numero%10; 
    numero/=10; 
    millares=numero;
    comprobante=millares/10; 
        
    if(comprobante==0){
        
        cout<<"Su numero Traducido a numeros romanos es: ";
        
        switch(millares){
            case 1: cout<<"M"; break;
            case 2: cout<<"MM"; break;
            case 3: cout<<"MMM"; break;

        }
        
        switch(centenas){
            case 1: cout<<"C"; break;
            case 2: cout<<"CC"; break;
            case 3: cout<<"CCC"; break;
            case 4: cout<<"CD"; break;
            case 5: cout<<"D"; break;
            case 6: cout<<"DC"; break;
            case 7: cout<<"DCC"; break;
            case 8: cout<<"DCCC"; break;
            case 9: cout<<"CM"; break;      
        }
        
        switch(decenas){
            case 1: cout<<"X"; break;
            case 2: cout<<"XX"; break;
            case 3: cout<<"XXX"; break;
            case 4: cout<<"XL"; break;
            case 5: cout<<"L"; break;
            case 6: cout<<"LX"; break;
            case 7: cout<<"LXX"; break;
            case 8: cout<<"LXXX"; break;
            case 9: cout<<"XC"; break;      
        }
        
        switch(unidades){
            case 1: cout<<"I"; break;
            case 2: cout<<"II"; break;
            case 3: cout<<"III"; break;
            case 4: cout<<"IV"; break;
            case 5: cout<<"V"; break;
            case 6: cout<<"VI"; break;
            case 7: cout<<"VII"; break;
            case 8: cout<<"VIII"; break;
            case 9: cout<<"IX"; break;  
        }
    }
    else{
        cout<<"Te dije de 4 cifras. Por desgraciado me cierro.";
    }
    
    int a;
    cin>>a;
    return 0;
}

解决方法

当程序完成时,程序将立即在终端中关闭。 cin>>a结束时,它正在等待输入。参见this

,

包含 #include

并在代码末尾添加 getch(); 。这将使您的控制台无法关闭。

,

您的代码完全没问题。

main()到达return 0;时,它就完成了。如果您将其作为.exe文件运行,则意味着程序已完成。当程序完成后,它将被关闭。

有几种方法可以使它保持关闭状态。许多人提到的一种方法是在窗口的末尾添加cin >> something;getch();#include <conio.h>,以便等到您输入内容后。

您还可以在程序到达return语句之前延迟程序。您可以在这里How do you add a timed delay to a C++ program?

进行检查

您还可以使用while循环将整个程序包装起来,例如:

while(true)
{
    // Your programs here
    if(someCondition) break;
};

其中someConditionbool类型,也许是char c; cin >> c; bool someCondition = (c == 'x');,这样程序只有在有人输入'x'时才结束,否则它将再次运行。