2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Не удаётся прочитать файл с помощью fscanf //C++
Сообщение11.11.2008, 19:16 


28/09/08
168
Написал программу, которая должна создавать и считывать float файл, но почему-то вместо того, чтоб считывать, программа входит в бесконечный цикл... Может, кто-нибудь знает в чём дело?

Код:
#include <assert.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

main()
{
FILE * fp;
float p,q,y;
int i=0;
int n=1;

clrscr();

fp=fopen("data-float.dat","w+");

if (fp==NULL)
{
    printf("Cannot create file\n");
    return 0;
}

float *temp;
float *array;
temp = new float [n];
assert(temp!=0);

array = new float [n];
assert(array!=0);

printf("Insert float numbers. To end press 'e'\n");

for (;;)
{
    p = scanf("%f\n",&q);

    if (p==0)
    {
     break;
    }
    fprintf(fp,"%f\n",q);
}

fclose(fp);

fp=fopen("data-float.dat","r");

if (fp==NULL)
{
    printf("Cannot open the file\n");
    return 0;
}


while (!feof(fp))
{
fscanf(fp,"%.4f",&y);// вот здесь программа отказывается читать из файла
array[i]=y; // и естественно, не передаёт никакого значения в array[i]
i++;
    for (int j=0; j<i; j++)
    {
     temp[j]=array[j];
    }

delete []array;
array = new float [i];
assert(array!=0);
  for (j=0; j<i; j++)
  {
   array[j]=temp[j];
  }
delete []temp;
temp = new float [i];
assert(temp!=0);
}

for(int j=0; j<i; j++)
{
  printf("%f5.2 \n",array[j]);
}


fclose(fp);

delete []array;
delete []temp;

getch();
return 0;
}


Там, где программа не хочет читать, смотрел из-под дебаггера - значение y как далось программой из мусора, так и остаётся, а i возрастает бесконечно.

 Профиль  
                  
 
 
Сообщение11.11.2008, 19:50 
Аватара пользователя


01/12/07
172
t3rmin41 в сообщении #157427 писал(а):
 fscanf(fp,"%.4f",&y);// вот здесь программа отказывается читать из файла


можно поинтересоваться,что означает
Код:
"%.4f"

 Профиль  
                  
 
 
Сообщение11.11.2008, 20:11 
Экс-модератор


17/06/06
5004
Внутри формата printf это означает что-то типа "вывести четыре знака после запятой". А внутри scanf - не знаю, что такое. Мне тоже это подозрительно.

 Профиль  
                  
 
 
Сообщение12.11.2008, 09:42 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
В функциях типа scanf такая запись действительно не работает. Допускается указывать только целое число, которое определяет максимальное количество символов для данного поля.

См. http://msdn.microsoft.com/en-us/library/kwwtf9ch.aspx

Рекомендую привыкнуть всегда проверять возвращаемое значение этих функций и обрабатывать любые нетипичные ситуации (как ранее в программе сделано для функции scanf).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group