fscanf(ошибка при чтении из файла)
От: anais  
Дата: 08.12.04 06:19
Оценка:
написала код — чтение-запись в файл (записывается всё корректно в 1 раз, если нет ещё файла), а при чтении (fscanf) VC++ вылетает. не могу понять почему, помогите найти ошибку

void CLinesView::EndGame()
{
CDEnd dlg(field->m_Points);
dlg.DoModal();
FILE *stream;
CString *buf1, *buf3;
int i=0, point[20], j,num=-1, buf2, buf4;
CString *name[20];
char str;

if( (stream=fopen( "data.ls", "r" )) == NULL )
{
//работает корректно 1 раз создаёт файл
stream = fopen( "data.ls", "w" ); //файла нет,создали новый
fprintf(stream, "%s%d",dlg.m_name,field->m_Points);
fclose(stream);

}else
{
while (!feof(stream))
{
///////////////читаем массив, ТУТ ВОЗНИКАЕТ ОШИБКА
fscanf(stream,"%s%d",str, point[i]);
name[i]->Format("%s",str);
TRACE("%s,%d",name[i],&point[i]);
i++;
};
fclose(stream);
for (j=0;j<i;j++)
{
if (field->m_Points>point[j]){num=j; break;}
};
buf1=name[num]; buf2=point[num];
name[num]->Format("%s",dlg.m_name);
point[num]=field->m_Points;
if (num<20)
{
if (i<20) {i++;};
for (j=num+1;j<i-1;j++)
{
buf3=name[j+1];buf4=point[j+1];
name[j+1]=buf1;point[j+1]=buf2;
buf1=buf3;
buf2=buf4;
}

}

stream = fopen( "data.ls", "w" ); //файла нет,создали новый
for (j=0;j<i;j++)
{
fprintf(stream, "%s",name[j]);
fprintf(stream, "%i",point[j]);
fclose(stream);
};


};
Re: fscanf(ошибка при чтении из файла)
От: e-Xecutor Россия  
Дата: 08.12.04 06:47
Оценка:
Здравствуйте, anais, Вы писали:

A>написала код — чтение-запись в файл (записывается всё корректно в 1 раз, если нет ещё файла), а при чтении (fscanf) VC++ вылетает. не могу понять почему, помогите найти ошибку


Информация для размышления:
A>            fscanf(stream,"%s%d",str, point+i);
int intvar;
fscanf(str,"%d",&intvar);
Re[2]: fscanf(ошибка при чтении из файла)
От: anais  
Дата: 08.12.04 06:59
Оценка:
так тоже вылетает, не понимаю почему... просто появляется модальное окно что-то вроде 0х00000.....
Re[2]: fscanf(ошибка при чтении из файла)
От: DmitryKarpov Россия  
Дата: 08.12.04 07:10
Оценка:
Здравствуйте, e-Xecutor, Вы писали:

EX>Здравствуйте, anais, Вы писали:


A>>написала код — чтение-запись в файл (записывается всё корректно в 1 раз, если нет ещё файла), а при чтении (fscanf) VC++ вылетает. не могу понять почему, помогите найти ошибку


EX>Информация для размышления:

EX>
A>>            fscanf(stream,"%s%d",str, point+i);
EX>int intvar;
EX>fscanf(str,"%d",&intvar);
EX>



Мудрено товарищ ответил... Наверное, сразу умным родился.

В общем, в fscanf надо передавать адрес переменной, то есть вместо
fscanf(stream,"%s%d",str, point[i]);

надо написать
fscanf(stream,"%s%d",str, &point[i]);


а вот в последующем
TRACE("%s,%d",name[i],&point[i]);

наоборот, & не нужен
TRACE("%s,%d",name[i], point[i]);



Что касается str — ее надо заменить на массив char, а не на просто char str.
char str[число_большее_чем_максимальная_длина_строки];


а вот CString *name[20] наоборот надо сделать массивом объектов а не указателей.
CString name[20];
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.