C语言 写入用户指定的文件

insrf1ej  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(179)

readFromFile()函数在程序开始时使用。
当用户写入一个文件名时,如果该文件存在,则程序应从该文件读取数据;如果具有该名称的文件不存在,则程序应保留用户输入的名称,并在关闭程序之前使用writeToFile()函数将其写入该文件。
问题在fp=fopen(a,“w”)中;函数writeTofile()不能识别a,所以它不知道用户在程序开始时输入了什么名字。2我的想法是既然我在两个文件中都有FILE *fp,它应该能识别“a”。3但是它不能,我不知道怎么做。
writeTofile()函数需要知道用户在readFromFile()中写入了什么文件名。
第一个

r6l8ljro

r6l8ljro1#

在单独的函数中执行此部分:

char a[100];
    printf("filename: ");
    fscanf(stdin,"%s",a);
    strcat(a,".txt");

然后将a传递给函数readFromFile和函数writeToFile

iszxjhcz

iszxjhcz2#

变量a位于readFromFile()函数内部,因此从外部不可见。
一种“解决方案”是使其成为全局的,即在所有函数之外定义它:

char a[100];

void readFromFile(Car reg[], int *pNrOfCars){
  /* ... */
}

那么从任何函数内部都可以看到它,但是全局变量通常不是一个好主意,因为它们很混乱,使程序更难理解。
最好通过添加一个参数将文件名传递给函数:

void readFromFile(Car reg[], int *pNrOfCars, const char *filename) {
  /* ... use filename instead of a ... */
}

然后将获取文件名的代码移到main()函数中,因为阅读文件名并不是特定于读取文件名的操作,所以不应该在文件内部执行:

int main(void)
{
   char fname[100];
   printf("filename: ");
   fscanf(stdin,"%s", fname);
   strcat(fname, ".txt");  
   
   readFromFile(..., fname);
   /* ... process data ... */
   writeToFile(..., fname);

   return 0;
}

我跳过了一些细节,用“..."标记。

相关问题