【问题标题】:I solved a thing, don't know the reason behind我解决了一个问题,不知道背后的原因
【发布时间】:2020-12-28 03:43:53
【问题描述】:

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

我发现很少有解决方案,对我有用的一个是添加:

int a;
cin>>a;

在返回 cero 之前。现在它起作用了。我不明白控制台如何不执行没有它给出的操作。我把代码留在这里。


#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;
}

【问题讨论】:

  • Relevant Q with no accepted A,因此不能被标记为重复。你没有 return 语句,但声明了 int main ,它期望返回一些东西,所以编译器只需要运行它,它就被打破了,但无论如何都构建了 exe。
  • 我不明白,我确实有返回 0;之前的声明。我添加的完全是 int a,; cin>>a;
  • 没有。对不起。可能行为取决于您使用的编译器和/或设置,但关于 C++ 的 IDK 足以帮助解决这些问题。

标签: c++ compiler-errors console dev-c++


【解决方案1】:

你的代码完全没问题。

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

有几种方法可以让它保持不关闭。许多人提到的一个是在最后添加cin &gt;&gt; something;getch();#include &lt;conio.h&gt; for windows,所以它会等到你输入一些东西。

您也可以在程序到达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 &gt;&gt; c; bool someCondition = (c == 'x'); 这样程序只有在有人输入“x”时才会结束,否则它会再次运行。

【讨论】:

    【解决方案2】:

    包括 #include

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

    【讨论】:

    • 啊哈,但为什么有必要这样做?
    【解决方案3】:

    程序完成后,程序会立即在终端中关闭。当您cin&gt;&gt;a 时,它会在关闭前等待输入。见this

    【讨论】:

    • 好的,但是为什么到了return 0就没有结束呢?
    • 在您输入cin 并按回车后,它会退出吗?
    • 是的,正如预期的那样。
    • 正确,所以一旦到达return 0,它就会退出程序。添加cin&gt;&gt;a 会延迟这一点,这就是您可以看到它的原因。如果你没有那个,程序退出太快,你看不到它。
    • 哦,它完成了这项工作,但在你看到它之前就关闭了?好吧,我明白了。没有比输入 cin 更“官方”的解决方案吗?是他们在另一个答案中告诉我的 getch 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2021-03-11
    • 2022-01-25
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多