1

我的 C 代码中出现此错误。我不知道我做错了什么。如果我评论这段代码,我的程序就可以工作。这段代码在 int main() 中。

 if(argc!=2 && strcmp(argv[0],"selection-sort")==0 && strcmp(argv[1],"input.txt")==0 && strcmp(argv[2],"output.txt")==0)
        {
                printf("The command line arguments are correct.\n");
        }
        else
        {
                printf("The command line arguments are wrong.I am exiting.\n");
                break;
        }
4

6 回答 6

9

它看起来的方式我认为你不是在循环中,而只是在 main 中检查 args。您可能想要类似return 1exit(1)代替休息的东西。

于 2012-08-22T19:38:14.017 回答
4

首先确保您包含所需的头文件:

#include <stdio.h>
#include <stdlib.h>

break 命令用于退出循环,你不在循环中,你只是在 else 语句中,你没有什么可中断的。代码流在传递 else 语句后正常执行。如果你想在 else 语句中退出程序,你可以这样做:

    else
    {
            printf("The command line arguments are wrong.I am exiting.\n");
            return 1; //exit program with status 1 to indicate a non normal exit
    }

或者,如果您想在显示该消息后继续程序,您可以这样做:

else printf("The command line arguments are wrong.I am exiting.\n");
//more code here

您只能在循环中使用 break ,如下所示:

while(foo)    //while foo is true
{
    break;    //exit the loop
}
于 2012-08-22T19:42:49.903 回答
3

标题中的错误消息说明了一切:break只能用于退出循环或防止案例失败。MSDN 报价:

break 语句终止它出现的最近的封闭 do、for、switch 或 while 语句的执行。

要离开一个函数,请使用return.

于 2012-08-22T19:40:55.287 回答
3

Break 应该在循环中使用。

使用return语句,这会导致执行离开当前子例程,并在调用子例程之后的代码点(返回地址)处继续执行。

于 2012-08-22T19:42:31.447 回答
1

其他答案都是正确的,这只是一个小小的补充。

要在这种特定情况下返回可能,您应该包括errno.h以下内容:

#include <errno.h>

而且还像这样返回:

return EINVAL;

然后,您发出信号表明程序由于错误而终止,并且返回值明确指出错误是无效参数。

于 2012-08-22T19:57:22.240 回答
1

'break' 只会让你脱离最里面的循环或开关。您可以随时使用“return”退出函数。

“break 语句可能只出现在迭代语句或 switch 语句中,并终止执行最小的封闭此类语句”。

这也是有道理的——你可以用“return”从一个方法中“逃脱”,你可以用if/else跳过其他情况下的代码。我不知道案件之外的“休息”会做什么。

无论如何,“break”实际上只是“goto”的一种受限形式。理想情况下,您需要从任何代码块中单点退出。你真的应该只在 switch 语句中使用'break',因为这是让它工作的唯一方法。在任何其他情况下,有更好的方法来完成同样的事情。这同样适用于“继续”。

于 2014-02-26T05:26:52.507 回答