2011-10-10 67 views
-3
#include <stdio.h> 
#include <stdlib.h> 

void main() 
{ 
    int i,x; 

    FILE *fl1, *fl2; 

    x = 0; 

    for(i = 0; ; i++) 
    { 
     fl1 = fopen("file1","r"); 
     fl2 = fopen("file2","r"); 
     if(fopen("file1","r") == NULL && fopen("file2","r") == NULL) 
     { 
      x = x + 1; 
     } 
     else break; 
    } 

    printf("\n\nDONE!\n\n"); 
} 

我有這段代碼,我希望它只在2個文件,file1和file2存在時打印完成。 但它似乎不起作用。當我只創建file1時,程序中斷,如果我只創建file2,也是一樣。只有當兩個文件存在時才繼續程序C

+0

你的意思是1. _only_這兩個文件完全存在於文件夾中或者2.這兩個文件都存在於文件夾_at least_? – holex

回答

1

聲明:

if(fopen("file1","r") == NULL && fopen("file2","r") == NULL) 

如果不存在這兩個文件,留下另3例(一個存在,其他的存在,或兩者同時存在)被同樣的方式對待只會是真實的。

如果您的目的是簡單地輸出DONE如果都存在,你可以嘗試:

#include <stdio.h> 

int main (void) { 
    FILE *fl1, *fl2; 

    fl1 = fopen ("file1", "r"); 
    fl2 = fopen ("file2", "r"); 

    if (fl1 != NULL && fl2 != NULL) 
     printf("DONE\n"); 

    if (fl1 != NULL) fclose (fl1); 
    if (fl2 != NULL) fclose (fl2); 
} 

這也擺脫了你更多的,應當說,... ...豐富多彩的語法結構: - )

1

您正在進行錯誤的測試。如果文件無法打開,則fopen返回NULL。您的測試應該更像:

if(fopen("file1","r") != NULL && fopen("file2","r") != NULL) 

編輯:for(i = 0; ; i++)是一個無限循環。

3

由於您在fl1和fl2中存儲fopen()的返回值,只是比較它們不是NULL。

fl1 = fopen("file1","r"); 
fl2 = fopen("file2","r"); 

if(fl1 != NULL && fl2 != NULL) 
{ 
    printf("\nDONE!"); 
} 
1

你應該寫

FILE *fin1 = fopen("file1", "r"); 
FILE *fin2 = fopen("file2", "r"); 
if (fin1 != NULL && fin2 != NULL) 
{ 
    // Do your work 
    fclose(fin1); 
    fclose(fin2); 
} 
else 
{ 
    // some file didn't open. Close the other possible open one and return error 
    if (fin1) 
     fclose(fin1); 
    if (fin2) 
     fclose(fin2); 
    // give error; 
} 

注意fclose部分。關閉您打開的文件非常重要。例如,如果您稍後想要再次打開它。一般來說,無論您從操作系統獲取什麼資源(例如內存,文件,套接字等),都有責任返回它。

0

如果您只是想檢查文件是否存在,而不是打開它們,請使用access(),例如。

#include <unistd.h> 

if (!access("file1", F_OK) && !access("file2", F_OK)) 
{ 
    /* Files exist, do something */ 
} 
相關問題