gpt4 book ai didi

c - 这是正确的吗? (在 C 中读入文件)

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:17 25 4
gpt4 key购买 nike

对于我的作业,我必须创建一个类似于 -wc unix 命令的程序来计算字数、行数等。

我必须读入标志并读入文本文件。

我已经设置了所有标志,现在我正在尝试读取一个文本文件。我不认为我这样做是对的。

void readInFile(char** argv, int arg)
{
FILE *myFile;
char c;

myFile = fopen(argv[arg], "r");
if(!myfile)
{
printf("%s not found!", argv[arg]);
exit(EXIT_FAILURE);
}
}

在我的 main 中,我调用函数 readInFile() 并传递 2 个参数。 Argv 和文件所在的元素。所以假设这是正确的。

我需要实际打开文件的帮助。我觉得我的 fopen() 是错误的。我不熟悉用 C 语言读/写文件。非常感谢!

最佳答案

我将在这里给你一些一般性的建议。

通常函数应该做一个单一的工作。在这种情况下,您正在编写一个函数来读取单个文件。所以,不要传递指向所有命令行参数的指针;传入一个指向要打开的文件名的只读指针。然后在 main() 中选择正确的参数并将其作为参数传递。

void readInFile(char const *filename)

现在,如果这个函数将读取文件而不做任何其他事情,它需要以某种方式返回数据。但是,如果此函数将执行与 wc 相同的操作,它可能会读取文件并打印内容,而不会将任何数据返回给 main() 函数。那么也许应该改进名称:

void wordcount(char const *filename)

fopen() 的实际调用对我来说看起来不错。

您检查错误,然后立即调用 exit()。这是一种方法。另一种方法是从您的函数返回一个错误代码,并让调用者(main() 函数)检查失败,并在那里处理错误。

int wordcount(char const *filename)
{
// ... do stuff
if (failed)
return 1; // return nonzero error code on failure
// ... do more stuff
return 0; // success code
}

int main(int argc, char const **argv)
{
char const *filename;
int result;

filename = argv[1];
result = wordcount(filename);
if (result)
{
fprintf(stderr, "unable to open file '%s'\n", filename, result);
exit(result);
}
return 0;
}

对于这么简单的程序,这无关紧要。但是,一旦您开始在软件中构建更大的系统,如果您的函数可以很好地协同工作,您会更快乐,其中一部分是使函数返回错误代码,而不是在出现任何错误时终止整个程序。

为什么我使用 0 作为成功代码,而使用非零作为失败代码?这是一种常见的方法。很容易测试非零,比如 if (result) 有很多非零代码但只有一个零,所以你可以返回多种不同类型的错误,但只有一个值“成功”所必需的。

请注意,不是从 main() 调用 exit(),您可以只使用 return 语句。当您从 main() 返回 0 时,表示成功,非零值表示错误。因此,您可以根据需要使用 return result; 来自 main()

在我的虚拟代码中,我只是返回 1 作为错误代码。但实际上,当您调用 fopen() 时,它会在名为 errno 的全局变量中返回一个错误代码给您。可能更好的选择是让您的函数返回 errno 中指定的实际错误代码。您甚至可以修改 main() 函数中的 print 语句打印 errno 代码,或使用 strerror() 函数来转换该错误编码成人类可读的消息。

关于c - 这是正确的吗? (在 C 中读入文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14698070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com