2013-07-28 133 views
1

在我的C++书籍示例中,我使用了系统(“暂停”)来保持屏幕打开,这是我从操作系统学习的作业。现在我从我的书中使用exit()并根据true或false屏幕消失的示例。如果我退出exit()程序继续计算(这就是为什么作者放入exit())但是如何解决这个问题?我正在为Windows桌面使用Microsoft VS C++ Express 2012。保持屏幕打开

//prime.cpp 
// demonstrates IF statement with prime numbers 
#include <iostream> 
using namespace std; 
#include <process.h>  //for exit() 

int main() 
    { 
     unsigned long n,j; 
     cout << "Enter a number: "; 
     cin >>n;     //get number to test 
     for (j=2; j<= n/2; j++)  //divide by integer from 
      if(n%j==0)    //2 on up; if remainder is 0, 
      {      //it's divisible by j 

      cout <<"It's not prime; divisible by " <<j<<endl; 
      exit (0);    //exit from program 
      } 
     cout <<"It's prime\n"; 

     system ("pause"); //the only way I can get screen to stay open 
     return 0; 
    } 

如果答案是素数,则工作正常。如果回答是一个非主屏幕,就会眨眼。如果我删除退出()我得到这个结果:

输入数字:8 它不是素数; 2被整除 它不是素数;可被4整除 它是素数 按任意键继续。 。 。

回答

7

如果你想运行一个终端程序,从终端运行它。由于您调用程序的方式,屏幕正在消失。程序没有错。

+0

我同意程序是好的。但直到现在,我已经完成了书本练习并保持屏幕打开,但是使用新代码:exit()在IF语句为true时关闭。作为一个noob,我不确定你的意思是“从终端运行它”,但我通过尝试了解它们提供的响应来学习很多,谢谢! –

+0

@AigaigaShearer:你正在写终端程序,而不是GUI程序。但是你从一个GUI,而不是一个终端运行它们。所以有些东西正在为程序运行创建一个临时终端。如果你真的从终端上运行它们,它们会使用现有的终端,并且不会有新的屏幕消失。您可以通过在运行栏中输入“cmd”来在Windows中获得终端。 –

2

您可以通过重构您的代码以使用break;代替exit(0)来解决此问题。前者只会跳出循环,后者则会结束整个程序。

当发生对exit(0)的调用时,执行永远不会到达您的system("pause");调用,所以程序会立即结束而不会提示用户继续。

break;另一方面,将跳出循环。

如果您需要更多关于如何具体实施的指导,请告诉我。由于它是功课,你应该先试一试:)。提示:仅仅使用break;代替exit(0)将不起作用,因为您的代码是如何设置的。

+0

谢谢,顺便说我说这是“家庭作业”,但我正在教我自己!所以,我已经尝试过休息,是的,它会停止计算,但是因为你暗示它不会完成整个诡计,因为它还包括“它是总理”,以及“它不是总理;被2整除”之后。我试着移动花括号,也删除它们,并把“这是总理”的ELSE。再次感谢您的帮助! –

+0

@AigigailShearer:啊,好的:)。很高兴帮助。您也可以在循环外部保留一个布尔标志变量来指示是否找到了一个因子。 –

2

如果你想在任何时候移出循环,你可以使用break声明。并且对于屏幕暂停,您可以使用getch()函数conio.h,但它不是标准C++getch()等待字符输入(您可以使用此语句,按任意键继续)。对于getch(),使用ISO C++一致性_getch()