簡體   English   中英

C-使用用戶輸入的文件名

[英]C - Using a user input file name

我嘗試從用戶輸入中打開文件時遇到問題。 如果文件名是第一次輸入,我可以打開它,但如果在while循環中它是正確的,則不能打開它。

    char file[256], *end;
printf("Enter the name of the file: ");
fgets(file, 256, stdin);
if((end=strchr(file, '\n'))!=NULL)
    *end='\0';
FILE *fp=fopen(file, "r");
while(fp==NULL)
{
    printf("The given file doesn't exist. Enter a file name: ");
    fgets(file, 256, stdin);
    if((end=strchr(file, '\n'))!=NULL)
        *end='\0';
    FILE *fp=fopen(file, "r");
}

您需要在此處考慮該平台,以使其跨平台文件的代碼檢查方法是否不同。 如果平台不重要,那么您不必擔心Windows,在Linux中,您可以使用stat utility

檢查文件是否存在的簡單方法(以讀取模式檢查):

int read_file_exists(const char *filename)
{
   FILE *fp = fopen (filename, "r");
   if (fp!=NULL) fclose (fp);
   return (fp!=NULL);
}

檢查此鏈接以獲取有關C文件檢查的更多信息

如果文件名是第一次輸入,我可以打開它,但如果在while循環中它是正確的,則不能打開它。

不,你被騙了。 問題是while(fp==NULL)中的循環條件測試了在循環外部聲明的變量fp的值,而在循環內部您從未設置該變量,因此,如果您進入循環,則永遠不會退出。

但這並不意味着您無法在第二次嘗試或隨后的嘗試中打開文件。 在循環內部,聲明另一個變量fp ,將其“陰影化”到外部,然后將fopen()的結果分配給它。 當此fopen()成功執行時,您實際上將忽略結果。

回答說,另一個現在已刪除的方法,主要要做的是修復循環,使其使用與外部相同的fp 實現的最小更改將產生此版本的循環:

while(fp==NULL)
{
    printf("The given file doesn't exist. Enter a file name: ");
    fgets(file, 256, stdin);
    if((end=strchr(file, '\n'))!=NULL)
        *end='\0';
    fp=fopen(file, "r");
}

在此處和前面的代碼中輸入文件名的方式還有其他一些問題,以及一些不必要的代碼重復,但是只要用戶輸入的文件名簡單而簡短,就可以做到。特技。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM