Массивы индексируются с нуля, а не с единицы
int x[4]; // соответственно x[ 0 ], x[ 1 ], x[ 2 ], x[ 3 ];
for (int i = 0; i < 4; i++)
x[ i ];
Вся соль заключается в том y[ 4 ] - Это уже за пределами массива, и там может быть что угодно.
Другие языки программирования и технологии
С++ file со struct
вопрос отличный +5
на ответы подпишусь, потому что самому очень интересно.
в с++ разбираюсь а вот эта тема file в struct всегда волновала
еще раз спасибо за вопрос
на ответы подпишусь, потому что самому очень интересно.
в с++ разбираюсь а вот эта тема file в struct всегда волновала
еще раз спасибо за вопрос
файл, содержащий данные типа структура? или структура, одним из полей которой является указатель на файл? в любом случае ничего сложного не вижу...
Начнем с того что структура написана не совсем верно.
Целесообразнее было бы создать структуру Point, которая хранила бы координаты одной точки, а потом создать структуру Rect, которая бы хранила две точки - верхнюю -левую и правую-нижнюю. Но даже если не использовать структуру Point, то все равно НЕ ПРАВИЛЬНО. Структура должна хранить просто четыре координаты, а не масив координат. Вот так:
struct RECT
{
double x1,y1; // координаты верхней-левой точки
double x2,y2; // координаты верхней-правой точки
};
теперь в функции main необходимо организовать массив из объектов структуры типа RECT. Вот так:
int main()
{
const kol = 4;
RECT rects[ kol ];
return 0;
}
теперь по поводу обращения к элементам массива: HANDLE прав! индексация элементов массива в С/С++ и родственных языках всегда начинается с нуля, в отличие от некоторых других языков.
Ну а дополнительный вывод последней строки связан с функцией feof. Лучше использовать немного другую конструкцию. Полный код привожу ниже. Да кстати, я не использую преобразования в стили С++, для данной задачи это вовсе не обязательно, но если надо произвести впечатления на преподавателя, то тогда конечно
#include < iostream >
#include < fstream >
#include < ctime >
using namespace std;
struct RECT
{
double x1,y1;
double x2,y2;
};
int main()
{
const int kol = 4;
RECT rects[kol];
//заполняем координаты
srand(time(0));
for(int i=0; i < 4;i++)
{
rects.x1 = rand() % 101 - 50;
rects.y1 = rand() % 101 - 50;
rects.x2 = rand() % 101 - 50;
rects.y2 = rand() % 101 - 50;
//выведем на экран для проверки
cout<<rects.x1<<';'<<rects.y1<<'\t'<<rects.x2<<';'<<rects.y2<<endl;
}
cout<<endl<<endl;
//записали в файл
ofstream fout("rects.dat", ios::out|ios::binary);
if( fout . is_open ( ) )
{
fout.write((char*)rects, sizeof(rects));
}
else
{
cerr<<"Cannot open file for write!\n";
return 0;
}
fout.close();
//теперь читаем из файла данные
RECT tmp;//это вспомогательный объект структуры
ifstream fin("rects.dat", ios::in|ios::binary);
if( fin . is_open ( ) )
{
while(fin.read((char*)&tmp,sizeof(tmp)))
{
cout<<"top coord: ("<<tmp.x1<<';'<<tmp.y1<<")\t";
cout<<"bottom coord: ("<<tmp.x2<<';'<<tmp.y2<<")\n";
}
}
else
{
cerr<<"Cannot open file for reed!\n";
return 0;
}
fin.close();
return 0;
}
Целесообразнее было бы создать структуру Point, которая хранила бы координаты одной точки, а потом создать структуру Rect, которая бы хранила две точки - верхнюю -левую и правую-нижнюю. Но даже если не использовать структуру Point, то все равно НЕ ПРАВИЛЬНО. Структура должна хранить просто четыре координаты, а не масив координат. Вот так:
struct RECT
{
double x1,y1; // координаты верхней-левой точки
double x2,y2; // координаты верхней-правой точки
};
теперь в функции main необходимо организовать массив из объектов структуры типа RECT. Вот так:
int main()
{
const kol = 4;
RECT rects[ kol ];
return 0;
}
теперь по поводу обращения к элементам массива: HANDLE прав! индексация элементов массива в С/С++ и родственных языках всегда начинается с нуля, в отличие от некоторых других языков.
Ну а дополнительный вывод последней строки связан с функцией feof. Лучше использовать немного другую конструкцию. Полный код привожу ниже. Да кстати, я не использую преобразования в стили С++, для данной задачи это вовсе не обязательно, но если надо произвести впечатления на преподавателя, то тогда конечно
#include < iostream >
#include < fstream >
#include < ctime >
using namespace std;
struct RECT
{
double x1,y1;
double x2,y2;
};
int main()
{
const int kol = 4;
RECT rects[kol];
//заполняем координаты
srand(time(0));
for(int i=0; i < 4;i++)
{
rects.x1 = rand() % 101 - 50;
rects.y1 = rand() % 101 - 50;
rects.x2 = rand() % 101 - 50;
rects.y2 = rand() % 101 - 50;
//выведем на экран для проверки
cout<<rects.x1<<';'<<rects.y1<<'\t'<<rects.x2<<';'<<rects.y2<<endl;
}
cout<<endl<<endl;
//записали в файл
ofstream fout("rects.dat", ios::out|ios::binary);
if( fout . is_open ( ) )
{
fout.write((char*)rects, sizeof(rects));
}
else
{
cerr<<"Cannot open file for write!\n";
return 0;
}
fout.close();
//теперь читаем из файла данные
RECT tmp;//это вспомогательный объект структуры
ifstream fin("rects.dat", ios::in|ios::binary);
if( fin . is_open ( ) )
{
while(fin.read((char*)&tmp,sizeof(tmp)))
{
cout<<"top coord: ("<<tmp.x1<<';'<<tmp.y1<<")\t";
cout<<"bottom coord: ("<<tmp.x2<<';'<<tmp.y2<<")\n";
}
}
else
{
cerr<<"Cannot open file for reed!\n";
return 0;
}
fin.close();
return 0;
}
Похожие вопросы
- Чем отличается typedef struct от struct в С ?
- C++, вывод char в file.
- Трабл с Фотошопом : "Could not load default swatches becuase the file could not be found."
- С++. Чем отличается структура от объединения? В каких случаях целесообразнее использовать union, а в каких struct ?
- исправте пожалуйста прогу по паскалю: пишет unexpected end of file
- скачала фильм с сайта tfile.ru (torrent file) и теперь хочу переписать его на диск. Но почему-то не на DVD-R не на DVD p
- как можно формат MPEG File (.mpg) превратить в 3jp
- скиньте сылку программы чтоб формат MPEG File (.mpg) превратить в 3jp пожалуста
- Перестал открываться проект в 3DS Max 2010. При открытии выдает ошибку "File Open Failed:путь к проекту" Как его открыть?
- cmd copy file