我想在执行文件时使用参数打开文件,例如:
./Project 123.txt
我可以在某种程度上完成这项工作,但是如果我尝试将参数传递到函数中,然后调用该函数,则有些工作不太正常。
这是我的函数,它将从文本文件中读取行:
int numeroLinhas(){
int ch;
FILE *fp;
int linhas=0;
fp = fopen("123.txt","r");
while( ( ch = fgetc(fp) ) != EOF ){
if(ch=='n'){
linhas++;
}
}
fclose(fp);
fprintf(stats, "linhas: %dn", linhas);
}
int main(int argc, char *argv[]){
FILE *fp;
fp = fopen(argv[1],"r");
numeroLinhas();
}
所以,我想知道如何将argv[]
有一个参数传递到我的numeroLinhas()
函数中,这样我就不必在编码过程中调用文件名,只需在执行时。
问题是您已对要打开的文件名进行了硬编码。修改函数以接受参数,即命名文件的字符串。
然后,只需将正确的argv
条目作为参数传递给函数,首先检查程序的参数数量。
将文件名传递给计算文件中行数的函数:
#include <stdio.h>
void numeroLinhas(const char *filename)
{
int ch;
int linhas = 0;
FILE *fp = fopen(filename, "r");
if (fp == 0)
{
fprintf(stderr, "Failed to open file %s for readingn", filename);
return;
}
while ((ch = fgetc(fp)) != EOF)
{
if (ch == 'n')
linhas++;
}
fclose(fp);
fprintf(stats, "linhas: %d no %sn", linhas, filename);
}
int main (int argc, char *argv[])
{
for (int i = 1; i < argc; i++)
numeroLinhas(argv[i]);
return 0;
}
错误检查fopen()
调用;它们失败。 正确处理fgetc()
返回的int
。 将函数更改为返回void
,因为没有返回。 报告标准错误。 在输出中包含文件名(错误和例程)。 对提供的所有参数调用该函数。 如果没有提供参数,请不要说什么——或者在main()
的循环之前添加if (argc < 2) { fprintf(stderr, "Usage: %s file [...]n", argv[0]); return 1; }
。
很抱歉英语/葡萄牙语混合消息。
int numeroLinhas(char *filename){
char ch;
FILE *fp;
int linhas=0;
fp = fopen(filename,"r");
while( ( ch = fgetc(fp) ) != EOF ){
if(ch=='n'){
linhas++;
}
}
fclose(fp);
fprintf(stats, "linhas: %dn", linhas);
}
int main (int argc, char *argv[]){
//should have an if for argc size
char *filename = argv[1];
numeroLinhas(filename);
}