我正试图在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(;