2013-06-03 6 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

Да. Мэтт Эккерт был прав насчет фейсов. Я пытался с scanf, и он работает. – Arlind

+0

Вы прочитали документацию для 'fgets', прежде чем пытаться ее использовать? –

ответ

8

fgets сохраняет новую строку на входе.

+0

Я пробовал использовать «scanf («% s », name), и он работает! Исправлен ли scanf единственный правильный способ сделать это? – Arlind

+0

Вы можете заменить новую строку в строке из' fgets' нулевым символом. Будьте осторожны при использовании 'scanf' для ввода: http://c-faq.com/stdio/scanfprobs.html –

+0

Nice link for scanf() –

1

вот функция, которую вы должны будете добавить после fgets в SLOVE эту проблему

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; i> 0; i -) ... ваш код будет быстрее таким образом. –

0

Вы должны добавить «.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"); 
} 
Смежные вопросы