如果我有如下功能:
void func () {
//...
if (condition) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用break时它会给我一个错误.有没有其他方法可以使用if条件退出函数并正常完成代码编译?
switch(ch){
case 'a':
//do something, condition does not match so go to default case
//don't break in here, and don't allow fall through to other cases.
case 'b':
//..
case 'c':
//..
case '_':
//...
default:
//
break;
}
Run Code Online (Sandbox Code Playgroud)
在上面的switch语句中,我输入case'a',只有当它内部的条件发生时才会中断,否则我想跳转到默认情况.有没有其他方式这样做而不是标签或者gotos?
我使用R包foreach()
用%dopar%
做并行长(〜天)计算.我希望能够在其中一个产生错误的情况下停止整个计算集.但是,我还没有找到实现这一目标的方法,从文档和各种论坛我发现没有迹象表明这是可能的.特别是,break()
不起作用,stop()
只停止当前计算,而不是整个foreach
循环.
请注意,我不能使用简单的for循环,因为最终我想使用doRNG包并行化它.
下面是我在尝试的一个简化的,可重复的版本(串行这里显示%do%
,不过我用的时候有同样的问题doRNG
和%dopar%
).请注意,实际上我想并行运行此循环的所有元素(此处为10).
library(foreach)
myfunc <- function() {
x <- foreach(k = 1:10, .combine="cbind", .errorhandling="stop") %do% {
cat("Element ", k, "\n")
Sys.sleep(0.5) # just to show that stop does not cause exit from foreach
if(is.element(k, 2:6)) {
cat("Should stop\n")
stop("Has stopped")
}
k
}
return(x)
}
x <- myfunc()
# stop() halts the processing of k=2:6, but it does not stop the foreach loop …
Run Code Online (Sandbox Code Playgroud) 这看起来像是一项不可能的任务.绝对没有我找到的作品.问题是如何干净地关闭以Process.Start启动的控制台应用程序,该控制器应用程序在没有控制台窗口且没有使用shell执行的情况下启动:( ProcessStartInfo.CreateNoWindow = true; ProcessStartInfo.UseShellExecute = false;
).
如果它接收到ctrl-c或ctrl-break信号,那么正在启动的应用程序将"干净地"关闭,但似乎没有办法发送一个有效的应用程序(特别是GenerateConsoleCtrlEvent).
任何能够提供接受"Process"对象的代码的人都将被标记为答案,该代码以上述参数开始,这些对象导致已启动进程的干净关闭而不影响调用进程.使用7z.exe(7-zip归档程序)作为示例控制台应用程序,它开始压缩大文件,如果没有干净地终止,将留下损坏的未完成文件.
直到有人提供了通向功能示例的功能例子或代码,这个问题没有答案.我见过几十个人在网上问这个问题和几十个答案,但都没有..NET似乎不支持干净地关闭控制台应用程序给定其进程ID,考虑到它是从.NET进程对象开始的,这很奇怪.部分问题是无法在新进程组中创建进程,这使得使用GenerateConsoleCtrlEvent无用.必须有一个解决方案.
我编写代码并且(尽管这很难相信很多),偶尔会搞砸,创建一个无限循环.使用我的新奇特Excel,Ctrl + Break不再有效.Esc键等也没有.我看过整个网络,看起来微软有一个错误,并不关心修复它.
有没有人知道如何重新向VBA引入Ctrl + Break功能,所以如果将来发生这种情况我不会失去工作/强制关闭?谢谢!
我正在使用Eclipse和MinGW开发一个C项目.运行此项目的调试版本时,gdb始终在输入时中断main()
.我可以看出为什么这可能有用,但对于我目前的项目,我不希望这种情况发生.
我读过有一个命令
(gdb) break main
Run Code Online (Sandbox Code Playgroud)
从命令行运行时将完成相同的行为.
目前我没有.gdbinit文件.
目前,gdb在从命令行运行时不会停止进入main,但是从Eclipse运行时它会执行.
如何在Eclipse中默认进入main时使GDB停止运行?
var num = 0;
for(var i = 0; i < 10; i++){
for(var j = 0; j < 10 ; j++){
if(i == 5 && j == 5){
break;
}
num++;
}
}
console.log(num)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我希望结果为55,但为什么结果为95.
但是为什么如果我添加标签,结果会变成55?
var num = 0;
outermost:
for(var i = 0; i < 10; i++){
for(var j = 0; j < 10 ; j++){
if(i == 5 && j == 5){
break outermost;
}
num++;
}
}
console.log(num);
Run Code Online (Sandbox Code Playgroud)
假设我有这个:
while(a){
while(b){
if(b == 10)
break;
}
}
Run Code Online (Sandbox Code Playgroud)
问题: break语句是否会将我从两个循环中取出或仅从内循环中取出?谢谢.
有什么方法可以做到这一点C/C#
?
例如(C#风格)
for( int i=0; i<100; i++)
{
if(i==66)
break;
}
Run Code Online (Sandbox Code Playgroud) 我有一个带有for循环的函数:
func example() {
// create tasks
for link in links {
let currIndex = links.indexOf(link)
if let im = story_cache?.objectForKey(link) as? UIImage {
if ((currIndex != nil) && (currIndex < content.count)) {
if (content[currIndex!].resource_type == "image") {
content[currIndex!].image = im
return
}
}
} else {
if ((currIndex != nil) && (currIndex < content.count)) {
if (content[currIndex!].resource_type == "video") {
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsDirectory : NSString = paths[0]
let appFile = documentsDirectory.stringByAppendingPathComponent(content[currIndex!].id! + ".mov")
let …
Run Code Online (Sandbox Code Playgroud)