我想在执行时使用参数打开文件,例如:
./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: %d\n", linhas);
}
int main(int argc, char *argv[]){
FILE *fp;
fp = fopen(argv[1],"r");
numeroLinhas();
}
所以,我想知道如何将argv[]
有一个参数传递到我的numeroLinhas()
函数中,这样我就不必调用该文件的名称了在编码期间,就在执行时。
答案 0 :(得分:3)
问题是您已将文件名硬编码为打开。修改你的函数以获取一个参数,一个命名文件的字符串。
然后在首先检查程序的参数数量后,将正确的argv
条目作为参数传递给函数。
答案 1 :(得分: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: %d\n", linhas);
}
int main (int argc, char *argv[]){
//should have an if for argc size
char *filename = argv[1];
numeroLinhas(filename);
}
答案 2 :(得分:1)
将文件名传递给计算文件中行数的函数:
#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 reading\n", filename);
return;
}
while ((ch = fgetc(fp)) != EOF)
{
if (ch == '\n')
linhas++;
}
fclose(fp);
fprintf(stats, "linhas: %d no %s\n", linhas, filename);
}
int main (int argc, char *argv[])
{
for (int i = 1; i < argc; i++)
numeroLinhas(argv[i]);
return 0;
}
错误检查fopen()
来电;他们失败了。正确处理int
返回的fgetc()
。更改函数以返回void
,因为没有返回。报告标准错误的错误。在输出中包含文件名(错误和例程)。在提供的所有参数上调用该函数。如果没有提供参数,请不要说任何内容 - 或者在if (argc < 2) { fprintf(stderr, "Usage: %s file [...]\n", argv[0]); return 1; }
的循环之前添加main()
。
对于混合的英语/葡萄牙语消息感到抱歉。