2016-03-31 2 views
0

ВОПРОС

Откройте файл с клавиатурным вводом Напишите программу C, которая просит к пользователю имя файла (имя может содержать путь к каталогу ) и пытается открыть файл. Программа отображает сообщение «Файл open!» Или «Ошибка открытия файла» (программа не читает файл, просто пытается открыть ). Используйте gets(), чтобы получить пользовательский вводОткрытие файла, получая пользователю войти в каталог файлов, используя получает()

Итак, используя приведенный ниже код, я попытался прочитать путь к файловому каталогу и скопировать путь к нему в файл fopen(), а затем подтвердить, был ли открыт файл или нет. Путь к файловому каталогу вводится пользователем с помощью метода gets().

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *fp; 
    char directory[100]; 
    printf("Please enter the directory path of the file you wish to open.\n"); 
    gets(directory); 
    fp = fopen("%s,directory","r"); 
    if(fp==NULL) 
    { 
     printf("\nCannot open file."); 
    } 
    else 
    { 
     printf("\nFile open!"); 
    } 
    return 0; 
} 

МОЯ ПРОБЛЕМА

Независимо от того, что я помещал в нем не работает, и я скопировал пути каталогов файлов непосредственно из других программ, которые я создал, и я знаю работу. Есть идеи?

+2

См. [Почему 'gets()' опасен для использования?] (Http://stackoverflow.com/questions/1694036/why-is-the-gets-function-dangerous-why-should-it-not -использоваться). И сообщите своему учителю, что он написал назначение, которое использует 'gets()' - его никогда не следует использовать. –

+1

Вам нужно передать имя каталога, введенное пользователем, в 'fopen()' - это совершенно отдельно от 'printf()', хотя оно немного похоже на то, как будто вы пытаетесь смешивать записи. Используйте: 'fp = fopen (каталог,« r »):' который, вероятно, все равно будет терпеть неудачу, если данное имя является каталогом, но будет работать, если это файл. Кроме того, рекомендуется прекращать сообщения с помощью новой строки, а не (или иногда так же), начиная сообщение с новой строкой. –

+1

Второе, что сказал Джонатан Леффлер. Никогда не используйте 'gets', ни при каких обстоятельствах. (Извините, что я пронзительный, но это важно.) –

ответ

1

fp = fopen ("% s, directory", "r");

Это действительно сбивает с толку. Почему вы используете %s и ""? Просто используйте directory как параметр напрямую. например

fopen(directory, "r"); // make sure _directory_ refers to file for this function to succeed 

gets также считается dangerous.

+0

Да, я знаю об опасности, которая приходит с этим использованием, просто было указано, что в программе мы должны использовать, чтобы читать на вход пользователя (я не знаю Зачем). Я попытался использовать только каталог в качестве параметра, и он все равно не сработает. –

+0

@StephenD Хорошо, как я сказал, используя только каталог не будет работать, fopen нужен файл. Вам нужно объединить каталог с файлом –

+0

Извинения, я сохранил в «и поэтому он не работал, спасибо миллион. –

Смежные вопросы