简单的C退出循环..为什么代码不在这里终止



我正试图在C中处理基本的文件I/O错误,但由于某种原因,我的代码在运行exit((时不会立即退出,而是继续执行其余的代码和分段错误。

我已经评论了应该退出的行。为什么我的程序不在这里退出?

给定命令:(使用此命令(

./test

正确的命令:

./test <Input file>

代码应该检查是否有额外的关键字参数,如果没有,就会引发错误。

int main(int argc, char* argv[]){
FILE *fp;
int cur;
printf("%i", argc);
if (argc < 1){
perror("Syntax: ./test <Input File>");
exit(1);
}
// validate in_args are READABLE
for (int i=1; i<argc; i++){
fp = fopen(argv[i],"r");
if (fp == NULL){
fprintf(stderr, "%s: cannot open %s", argv[0], argv[i]);
exit(1);
}
}
// ================================ ^should exit here 
// OPEN FILE - EXCEPTIONS
fp = fopen(argv[1], "r");
while ((cur=fgetc(fp))!=EOF){
printf("%c",cur);
}
if (fp){
fclose(fp);
}


}

此测试

if (argc < 1) {

永远不会是真的——总是至少有一个参数(程序名(。你可能想要

if (argc != 2) {

这里,要求程序只使用两个参数运行,即程序名(argc[0](和输入文件(argc[1](

永不终止。。。忘记了从argv[1…argc]开始的输入参数

我不太确定你的答案,但我有一个可能在中工作的解决方案

代替使用出口(1(,使用break并且在环路投入(退出(1((之后

for(int i=0;i<100;++i({if(条件(退出(1(;//你在做什么}

现在看看你能做些什么来解决你的问题

for(int i=0;i<100;++i({如果(条件(打破}退出(1(;

最新更新