打开文件的参数

时间:2015-06-21 17:21:46

标签: c file

我想在执行时使用参数打开文件,例如:

./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()函数中,这样我就不必调用该文件的名称了在编码期间,就在执行时。

3 个答案:

答案 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()

对于混合的英语/葡萄牙语消息感到抱歉。