ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #4431  
Старый 08.12.2009, 19:34
InFlame
Участник форума
Регистрация: 27.10.2008
Сообщений: 215
Провел на форуме:
810079

Репутация: 90
По умолчанию

Код:
	FILE *fp;
	char *files[] = {file1, file2, file3};
	i=0;
	while(i<3) {
		printf("Обработка файла %s\n\t",files[i]);
		if((fp=fopen(files[i],"r+"))==NULL) { //если файл невозможно открыть, то выкидывается ошибка и переходим к следующему файлу в массиве
		perror("fopen");
		fclose(fp);
		i++;
	}
	//тут идёт обработка файла
	i++;
Есть массив файлов, программа обрабатывает этот массив, но если файл невозможно открыть, то программа завершает свою работу. Вопрос: как сделать так, чтобы программа продолжала свою работу, если файл невозможно открыть?
ЗЫ: Прога вылетает с ошибкой Segmentation fault (Ошибка сегментации).

Последний раз редактировалось InFlame; 08.12.2009 в 20:35..
 
Ответить с цитированием

  #4432  
Старый 08.12.2009, 20:20
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме:
2823587

Репутация: 106
Отправить сообщение для St0nX с помощью ICQ
По умолчанию

Цитата:
Есть массив файлов, программа обрабатывает этот массив, но если файл невозможно открыть, то программа завершает свою работу. Вопрос: как сделать так, чтобы программа продолжала свою работу, если файл невозможно открыть?
Прога завершается? или же всетаки с ошибкой вылетает? Если завершается нормально то гоняй в цикле пока массив с файлами не кончится.
 
Ответить с цитированием

  #4433  
Старый 08.12.2009, 20:34
InFlame
Участник форума
Регистрация: 27.10.2008
Сообщений: 215
Провел на форуме:
810079

Репутация: 90
По умолчанию

Прога вылетает с ошибкой (Ошибка сегментации).
 
Ответить с цитированием

  #4434  
Старый 08.12.2009, 21:16
POS_troi
Познавший АНТИЧАТ
Регистрация: 01.12.2006
Сообщений: 1,769
Провел на форуме:
3718311

Репутация: 1118


Отправить сообщение для POS_troi с помощью ICQ
По умолчанию

Цитата:
ifiles[i],"r+"
вся проблема тут, ибо по условию "i<3" ты в результате получаеш 4!!! (0,1,2,3) а четвертую ячейку массива она не может высосать из воздуха, сделай условие "i<2".

Компилил в мозгах, могу ошибаться но врятли.
 
Ответить с цитированием

  #4435  
Старый 08.12.2009, 21:21
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме:
2823587

Репутация: 106
Отправить сообщение для St0nX с помощью ICQ
По умолчанию

Цитата:
Сообщение от POS_troi  
вся проблема тут, ибо по условию "i<3" ты в результате получаеш 4!!! (0,1,2,3) а четвертую ячейку массива она не может высосать из воздуха, сделай условие "i<2".

Компилил в мозгах, могу ошибаться но врятли.
Неа будет 0 1 2 когда i = 3 оно уже не прокатит по условию
 
Ответить с цитированием

  #4436  
Старый 08.12.2009, 21:28
InFlame
Участник форума
Регистрация: 27.10.2008
Сообщений: 215
Провел на форуме:
810079

Репутация: 90
По умолчанию

Цитата:
Сообщение от POS_troi  
вся проблема тут, ибо по условию "i<3" ты в результате получаеш 4!!! (0,1,2,3) а четвертую ячейку массива она не может высосать из воздуха, сделай условие "i<2".

Компилил в мозгах, могу ошибаться но врятли.
Всё там правильно, потому что в цикле стоит условие "меньше", а не "меньше-равно." Да и суть не в этом. Я искусственно удаляю второй файл и на нём программа вылетает, а надо чтобы продолжала работу.

Последний раз редактировалось InFlame; 08.12.2009 в 21:32..
 
Ответить с цитированием

  #4437  
Старый 08.12.2009, 21:36
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме:
2823587

Репутация: 106
Отправить сообщение для St0nX с помощью ICQ
По умолчанию

Выложи весь код работы с файлами так ниче не понятно чё ты там делаеш, как удаляеш. В отладчике смотрел?
 
Ответить с цитированием

  #4438  
Старый 08.12.2009, 21:46
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

Емае, ну для кого отладчик придумали то? посмотри там на какой ф-ции вылетает и с какими параметрами.
 
Ответить с цитированием

  #4439  
Старый 08.12.2009, 21:59
POS_troi
Познавший АНТИЧАТ
Регистрация: 01.12.2006
Сообщений: 1,769
Провел на форуме:
3718311

Репутация: 1118


Отправить сообщение для POS_troi с помощью ICQ
По умолчанию

Цитата:
Да и суть не в этом. Я искусственно удаляю второй файл и на нём программа вылетает
Используя массив в определении fopen ты делаеш себе грабли (это не глюк - это фишка и доволи подробно опианная в WWW).

Проверяй наличие файлов перед циклом, твоя ошибка не так в коде как в реализации идееи - не стой стороны зашел.

i<3 - протупил, не о том думал =/

Последний раз редактировалось POS_troi; 08.12.2009 в 22:10..
 
Ответить с цитированием

  #4440  
Старый 09.12.2009, 09:54
winterfrost
Познающий
Регистрация: 18.08.2008
Сообщений: 45
Провел на форуме:
418790

Репутация: 64
По умолчанию

fclose(fp);
- если файл не открылся, мб и не надо его закрывать? =)

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

Последний раз редактировалось winterfrost; 09.12.2009 в 09:59..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP, PERL, MySQL, JavaScript 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Форумы 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ