Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не получается присвоить элементам векторов данные из текстового файла  (Прочитано 13019 раз)
0 Пользователей и 1 Гость смотрят эту тему.
tumanovalex
Помогающий

ru
Offline Offline

« : 03-02-2009 13:30 » 

Есть текстовой файл с числовыми данными:
54.000(пробелы или табуляторы)6.0E+01
162.000(пробелы или табуляторы)3.2E+01 и т.д.
Пытаюсь присвоить данные из файла векторам:
Код:
float a[N], b[N] ;
FILE* pfile;
pfile = fopen("Входной файл.txt", "r")
i = 0;
while(fscanf(pfile, "%f%f", a[i], b[i])!=NULL) {
 i++;
}
На первом же использовании fscanf появляется ошибка:
"Debug Assertion rated! Program: h: \MyProgramCyr\Learning\Debug\Learning. exe File: fscanf.c Line: 52
Expression: (stream != NULL) For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application). Подскажите, пожалуйста, как решить задачу.

* Learning.zip (0.65 Кб - загружено 833 раз.)
« Последнее редактирование: 03-02-2009 13:46 от Вад » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 03-02-2009 13:33 » 

а где eof?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #2 : 03-02-2009 13:35 » 

вот так: see the Visual C++ documentation on asserts
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 03-02-2009 13:45 » 

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

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
tumanovalex
Помогающий

ru
Offline Offline

« Ответ #4 : 03-02-2009 13:52 » new

При написании сообщения ошибся, вместо a[i] и b[i]) написал  a и b. Что касает остутствия мыслей по алгоритму, то мне казалось, что fscanf должен считать числовые данные из текстового файла и записать их в вектора a и b. Разве эта функция работает не так? По поводу EOF.  while(fscanf(pfile, "%f%f", a[i], b[i])!=EOF) также дает сбой. 
« Последнее редактирование: 03-02-2009 13:55 от Вад » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 03-02-2009 13:57 » 

tumanovalex, пользуйся тегами [code][/code] и [nobbc][/nobbc]. Иначе будет резать [i] - это тег для курсива в движке форума.
По теме: посмотри, аргументы каких типов получает функция fscanf.
Записан
tumanovalex
Помогающий

ru
Offline Offline

« Ответ #6 : 03-02-2009 14:45 » 

Спасибо за подсказку по поводу правильного ввода коды. А что такое nobbc/nobbc?
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #7 : 03-02-2009 14:50 » 

внутри этих тегов [nobbc][/nobbc] не раскрываются  другие теги
Записан

Удачного всем кодинга! -=x[PooH]x=-
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #8 : 03-02-2009 14:52 » 

попробуй заменить !=NULL на >0

а еще лучше условием цикла использовать EOF а внутри проста вызывать fscanf
« Последнее редактирование: 03-02-2009 14:54 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
tumanovalex
Помогающий

ru
Offline Offline

« Ответ #9 : 03-02-2009 15:16 » 

Правильный код следующий:
Код:
while(fscanf(pfile, "%f%f", &a[i], &b[i])==2)
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 03-02-2009 15:35 » 

tumanovalex, один взгляд в справочник и ты сэкономишь кучу времени.

Цитата
Return Value
On success, the function returns the number of items succesfully read. This count can match the expected number of readings or be less -even zero- in the case of a matching failure.
In the case of an input failure before any data could be successfully read, EOF is returned.

Следовательно, тебе надо проверять оба условия.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
tumanovalex
Помогающий

ru
Offline Offline

« Ответ #11 : 03-02-2009 20:04 » 

Спасибо большое, все понятно.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines