如何选择要打开的文件?

时间:2017-10-22 16:13:49

标签: c input struct

我有这个功能但是,在我插入主要功能后,用户可以在程序启动时输入文件名(因为有更多文件可用),如果存在则打开,否则不会?

void readFromFile(struct varor reg[], int *nrOfGoods){
        FILE * fp;
        fp = fopen("list.txt","r");
        if(fp!=NULL){
            char namn[WORDLENGTH];
            int varunummer, lagersaldo, i;

            fscanf(fp,"%d", nrOfGoods);//I have the quantity in the beggining of the file

            for(i=0;i<(*nrOfGoods);i++){
                fscanf(fp,"%d", &reg[i].varunummer);
                fscanf(fp,"%s", reg[i].namn);
                fscanf(fp,"%d", &reg[i].lagersaldo);

            }

            fclose(fp);
        } else printf("Could not open file.");
    }

2 个答案:

答案 0 :(得分:1)

尝试这样的事情,您可以创建在用户输入时存储文件名的字符串,并使用文件名,如下文所示。

char filename[20];
printf("Enter the name of the file\n");
gets(filename);
infile=fopen(filename,"r"); 
if (infile == NULL)
   {
    printf("Could not open file %s",filename);

   }
 else
   {
     do something
   }

答案 1 :(得分:0)

从您的代码中,修复起来似乎很简单,如果你想要做的是打开&#34; list.txt&#34;以外的文件。请记住,在fopen的函数定义中,看起来像这样:
FILE *fopen(const char *filename, const char *mode) found here
您打开的文件名为const。与它似乎暗示的相反,它并不意味着你只能使用字符串文字,只是在函数运行期间不会修改或销毁变量;它向您保证您的文件名变量将保持不变。

因此,由于它不需要文字,因此您可以将变量作为第一个(和第二个)参数传递。只需让用户输入一个表示文件路径的字符串,然后将其传递给您的方法。