2013-06-03 47 views
2

我想弄清楚如何用戶輸入可以作爲文件名在C.這裏是我寫的簡單程序。打開文件與用戶輸入(字符串) - C

#include <stdio.h> 
#define MAX 100 

int main() 
{ 
    FILE *fp; 
    char name[MAX]; 


    printf("Enter filename: "); 
    fgets(name, MAX, stdin); 

    if((fp = fopen(name, "w")) == 0) 
     printf("File cannot be opened!"); 

    return 0; 
} 

它總是打印「文件無法打開」。

+0

你有權限在當前工作目錄下創建的文件? –

+0

是的。 Matt Eckert對fgets說得對。我試着用scanf,它的工作原理。 – Arlind

+0

在嘗試使用它之前,您是否閱讀過「fgets」的文檔? –

回答

8

fgets在輸入中保留換行符。

+0

我試過用「scanf(」%s「,name),它的工作原理!scanf是唯一正確的方法嗎? – Arlind

+0

你可以用空字符替換'fgets'中的換行符。用於輸入的'scanf':http://c-faq.com/stdio/scanfprobs.html –

+0

用於scanf的好鏈接() –

1

這裏,你將有與fgets後添加上懸而未決這個問題

void newlineRemover(char *array) 
{ 
    int i , lenght ; 
    lenght = strlen(array); 
    for(i = 0 ; i < lenght ; i++) 
    { 
     if(array[i] == '\n') 
      array[i] = '\0' ; 
    } 
} 
+1

你的函數被破壞了:array [i] =='\ 0''應該是'array [i] ='\ 0''。 –

+1

您應該從數組的末尾開始,而不是遍歷整個數組,直到到達數組的末尾才刪除1個字符。您的for循環可以爲(i = lenght;我> 0;我 - )...你的代碼將會更快這種方式。 –

0

你必須加上「.txt」擴展,然後它會工作的功能。
以下程序打開在同一目錄下的txt文件爲以下日期的名稱:

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char a[1000000],s[20]; 
    strcpy(s,__DATE__); 
    int i,j,k,l; 
    strcat(s,".txt"); 
    printf("%s",s); 
    FILE *f,*ff; 
    f=fopen(s,"w"); 
}