readFromFile() 函式在程式開始時使用。
當用戶寫入檔案的名稱時,如果該檔案存在,則程式應從該檔案中讀取資料,如果具有該名稱的檔案不存在,則應保留用戶輸入的名稱,并在關閉程式之前將其寫入該檔案使用 writeToFile() 函式。
問題在于 fp=fopen(a,"w"); writeTofile() 函式無法識別 a,因此它不知道用戶在程式開始時輸入的名稱。我的想法是,由于我在兩者中都有 FILE *fp,它應該識別出“a”。但這不是我不知道該怎么做。
總結一下。writeTofile() 函式需要知道用戶在 readFromFile() 中寫入的檔案名。
void readFromFile(Car reg[], int *pNrOfCars){
FILE *fp;
char a[100];
printf("filename: ");
fscanf(stdin,"%s",a);
strcat(a,".txt");
fp=fopen(a,"r");
if(fp!=NULL){
char model[WORDLENGTH];
int year,milage;
while(fscanf(fp,"%s %d %d",model,&year,&milage)==3){
reg[*pNrOfCars]=createCar(model,year,milage);
(*pNrOfCars) ;
}
fclose(fp);
}
}
void writeToFile(Car reg[], int nrOfCars){
FILE *fp;
fp=fopen(a,"w");
if(fp!=NULL){
for (int i = 0; i < nrOfCars; i ){
fprintf(fp,"%s %d %d\n", reg[i].model, reg[i].year, reg[i].milage);
}
fclose(fp);
}
}
uj5u.com熱心網友回復:
在單獨的函式中執行此部分:
char a[100];
printf("filename: ");
fscanf(stdin,"%s",a);
strcat(a,".txt");
然后傳遞a給 functionreadFromFile和 function writeToFile。
uj5u.com熱心網友回復:
變數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;
}
我跳過了一些用“...”標記的細節。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/530481.html
標籤:C
上一篇:CMake-不存在可定位的規則
