if
如果满足某个条件,如何退出块?
我尝试使用break
但它不起作用:
if($bla):
$bla = get_bla();
if(empty($bla)) break;
do($bla);
endif;
Run Code Online (Sandbox Code Playgroud)
它说:致命错误:无法打破/继续1级...
我正在编写C代码,我正在分析一些数据.我已将程序设置为仅处理100个数据输入.当它有超过100个输入时,它会产生分段错误.我想创建一种方法,以便当输入数量超过100时,将警告用户并终止程序.我知道如何通过简单的方式从main函数中完成它return 0
,但是我是远离main的多个函数调用而且很难做到这一点,即使return 0
在这个函数中也会保持循环.
是否有任何直接的方法来终止整个程序而不是主要的?
我编写了一个简单的应用程序,它读取数据文件,解析文本,然后对该数据进行一些处理.数据文件在main()函数中打开.如果确定文件未正确打开,使用exit()函数是否是一种很好的编程习惯?例如:
if (!file.is_open() ){
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
此外,我的程序有一个单独的函数来解析文件中的数据.main()调用此函数.如果函数在数据中发现错误,我希望程序在打印错误消息后停止.在这种情况下,在我的解析函数中使用exit()函数是否可以接受?我问这个问题是因为,对我来说,允许一个函数自己退出程序而不将控制返回到main()函数似乎并不是很整洁.(如果这个问题看起来非常明显,我道歉.我是C++和编程的新手).
例如,考虑以下代码
int main(int argc,char *argv[])
{
int *p,*q;
p = (int *)malloc(sizeof(int)*10);
q = (int *)malloc(sizeof(int)*10);
if (p == 0)
{
printf("ERROR: Out of memory\n");
return 1;
}
if (q == 0)
{
printf("ERROR: Out of memory\n");
exit(0);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
什么返回0,返回1,退出(0)在上面的程序中执行.. exit(0)将退出总程序并且控件退出循环但是在返回0的情况下会发生什么,返回1,返回-1.
我正在尝试创建一个装饰器类来计算调用函数的次数,但是我收到一条错误消息:
"TypeError: __exit__() takes exactly 1 argument (4 given)"
Run Code Online (Sandbox Code Playgroud)
我真的不知道我是怎么给它四个论点的.我的代码看起来像这样:
class fcount2(object):
__instances = {}
def __init__(self, f):
self.__f = f
self.__numcalls = 0
fcount2.__instances[f] = self
def __call__(self, *args, **kwargs):
self.__numcalls += 1
return self.__f(*args, **kwargs)
def __enter__(self):
return self
def __exit__(self):
return self
@staticmethod
def count(f):
return fcount2.__instances[self.__f].__numcalls
@fcount2
def f(n):
return n+2
for n in range(5):
print f(n)
print 'f count =',f.count
def foo(n):
return n*n
with fcount2(foo) as g:
print g(1)
print g(2)
print 'g count …
Run Code Online (Sandbox Code Playgroud) 我正在使用VSTS 2008 + .Net 3.5 + C#来开发Windows窗体应用程序.我的困惑是,似乎Application.Exit不强制应用程序终止?如果没有,我应该调用哪个方法使应用程序终止?
编辑1:
通常主要方法是这样的,如何在不调用Environment.Exit的情况下优雅地退出Main函数?
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
Application.Run(new Form1());
}
catch (Exception ex)
{
Console.WriteLine (ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
乔治,提前谢谢
我有一个Java程序,它是ProcessBuilder
从另一个Java程序启动的.
System.exit(0)
从子程序调用,但对于我们的一些用户(在Windows上),java.exe
与子项关联的进程不会终止.子程序没有关闭挂钩,也没有SecurityManager
可能停止System.exit()
终止VM的挂钩.我无法在Linux或Windows Vista上自行重现此问题.到目前为止,问题的唯一报告来自两个Windows XP用户和一个Vista用户,使用两个不同的JRE(1.6.0_15和1.6.0_18),但他们每次都能够重现问题.
任何人都可以提出为什么JVM无法在之后终止System.exit()
,然后只在某些机器上终止的原因?
编辑1:我让用户安装JDK,这样我们就可以从违规的虚拟机中获取一个线程转储.用户告诉我的是,一旦他点击我的菜单中的"退出"项目,VM进程就会从VisualVM中消失---但是,根据Windows任务管理器,该进程尚未终止,无论多长时间用户等待(分钟,小时),它永远不会终止.
编辑2:我现在已经确认Process.waitFor()
在父程序中永远不会返回至少一个有问题的用户.总而言之:孩子VM似乎已经死了(VisualVM甚至没有看到它),但是父母仍然认为这个过程是实时的,Windows也是如此.
假设我有以下代码:
struct mytype
{
~mytype() { /* do something like call Mix_CloseAudio etc */ }
};
int main()
{
mytype instant;
init_stuff();
start();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
即使从start()内部的某个地方使用exit(),是否可以保证调用析构函数?
在C程序中,我通常使用EXIT_SUCCESS
或EXIT_FAILURE
在exit()
功能上提高程序的清晰度和可理解性.
但在System.exit()
我无法使用这些MACROS.
我可以将自己的界面定义为
public interface ReturnValues {
public int EXIT_SUCCESS = 0;
public int EXIT_FAILURE = 1;
}
Run Code Online (Sandbox Code Playgroud)
除了我自己的实现,在java中有没有其他方法可以使用这些宏?(比如使用预定义的库类变量或通过实现预定义的接口等...)
使用Windows MFC C++.我有一个第三方应用程序,它在我的CWinApp派生类中调用用户定义的方法.在InitInstance()之后调用此方法.如果此方法中存在错误,则抛出异常并捕获到try/catch块中,我想从catch块退出应用程序.什么是规范和正确的退出方式?
更新:
Serge我认为是正确的,在InitInstance()中返回false是退出应用程序的正确方法.但是,现在假设我想从CDialog派生类的OnInitDialog()处理程序退出,这是正确的方法.
更新2
对我来说,我发现调用PostMessage(WM_CLOSE)是我的非模态CDialog派生类的最佳方法.我试过的所有其他戒烟方法都会在某些情况下引发一些例外情况.
这是我如何使用它的一个例子:
BOOL SomeDialog::OnInitDialog()
{
CDialog::OnInitDialog();
::OleInitialize(nullptr);
try
{
// ...load settings file here
}
catch(...)
{
PostMessage(WM_CLOSE);
return TRUE;
}
// return TRUE unless you set the focus to a control
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)