Официальный сайт студ.городка НГТУ
Программирование и БД » непонятный результат 

#1  27.05.07 12:38

непонятный результат

Код::

FILE *Open_File(char fname[])
{
FILE *f;
char agree[LENGTH];

while((f=fopen(fname, "rb+"))==NULL)
{
puts("File was not found!");
puts("Do you want to creat a new file (yes/no)?");
gets(agree);
if(strcmp(agree, "yes")==0)
{ f=fopen(fname, "wb+");  break; }
puts("Enter name of file:");
gets(fname);
}
return f;
}

запускаю в первый раз и создаю новый файл. например- с:\test.dat
запускаю в последующие разы и при правильном наборе имени файла и пути к нему функция его открывает. А при неправильном - спрашивает согласие на создание в этом месте нового файла, если я ошибся случайно и не соглашаюсь, то вводя далее уже правильное имя и путь к файлу, функция уже его не находит. почему?

Offline

#2  27.05.07 13:19

Re: непонятный результат

откажись от gets(), попробуй что-нибудь аналогичное типа scanf/cin

Исправлено Смайлек (27.05.07 13:19)

Offline

#3  27.05.07 13:33

Re: непонятный результат

Дональдак написал(а):

почему?

Потому что посмотри на функцию свою.

Код: c:

FILE *open_file(char fname[])
{
FILE *f;
char agree;
 
if((f=fopen(fname, "rb+"))==NULL)
{
puts("File wasn\'t found!");
puts("Do you want to creat a new file (y/n)?");
scanf("%s", &agree);
if(agree == 'y') {
   puts("Enter name of file:");
   scanf("%s", fname);
   f=fopen(fname, "wb+");
}
}
return f;
}


Попробуй так.

Offline

#4  27.05.07 19:53

Re: непонятный результат

Заменил gets(fname) на scanf("%s", fname). Все заработало.
Karminsky, было необходимо добиться от пользователя какого-то конкретного ответа-результата, поэтому if в моем случае не подходит.

Offline

#5  28.05.07 09:20

Re: непонятный результат

Могу ошибаться, но для функции strcmp необходима строка с завершающим символом (\0). Фунцкия gets же в свою очередь его не дописывает.
А вобще - что gets, что scanf уже давно закрестили как небезопасные, так что потоки рулят :)

Offline

#6  28.05.07 11:30

Re: непонятный результат

да и вместо strcmp лучше использовать strncmp, иначе можно вызвать переполнение буфера...

Offline

#7  28.05.07 16:41

Re: непонятный результат

efferson, не знал этого... интересно.
Jaguar, думаю, в моей программке мне это не грозит.

Offline

#8  28.05.07 16:58

Re: непонятный результат

efferson написал(а):

Фунцкия gets же в свою очередь его не дописывает.

дописывает. Но зато у нее какой-то косяк с внутренним буфером - он не сбрасывается иногда

Offline

Программирование и БД » непонятный результат 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.039 сек.
Выполнено 14 запросов.