Здрасти мафия! 
Опитвам се да направя програма, която да регистрира жител (с трите имена, град, адрес, години и заетост) и ако той е студент, програмата да иска университет, факултет, специалност, ако е ученик да иска име на даскалото, ако е работник - фирма, специалност, длъжност и ако е безработен - дали е зарегистриран. 
Данните трябва да се запазват във бинарен файл. 
Това, което съм направил досега: 

// Трия кода за да не ми го крадат колеги и да ме скъсат 
Когато регистрирам жител, нямам проблеми, но когато изведа всички жители (опция 9) - програмата крашва и не знам какво да направя. 
Тези неща с файловете не сме ги взимали на лекции или упражнения, но трябва да го направя за курсова работа... 

Проблем с файлов вход/изход
Правилно мислиш. Ако функциите се ползват преди дефиницията, трябва да се декларират. 
 

Сега по същество, преди господата jhoro и petie1, да са набрали скорост. 
  
1. коментарите че употребата на conio, getch и system не се препоръчва са верни, но не пречат, ако компилираш с майкрософтския компилатор. 
2. Трябва да добавиш флага ios::out към флаговете когато отваряш за добавяне. Поне gcc под линукс имплементацията не желае да пише иначе. 
3. Крашването е по сериозен проблем и изисква дебело обяснение за начинаещ. По-накратко: 
string е клас за динамичен низ. Не е съставен само от данните за низа, не е еквивалентен на char, не може да се копира, чете или записва с операции които работят с последователни байтове. 
метода write на класа ofstream(fstream) от своя страна чете побитово каквото му се даде и го записва във файл. 
Тоест не може да записваш string или структури които съдържат string директно със ofstream::write. По-точно можеш , но резултатът ще бъде много различен от очакваното. Аналогично, при опит за четене, прочиташ информация, която не e вярна и презатръшкваш памет, която не притежаваш, при което операционната система ти убива процеса. 
Тоест ако желаеш да работиш със string (или какъвто и да е динамичен тип данни) трябва да извършиш операция която се казва сериализация: да си превърнеш динамичните данни в последователна поредица от байтове, които могат да се записват и от които после да може да си възстановиш обекта. Типът стринг си има метод който ти връща точно такъв тип данни - cstr(). 
По-лесния подход е да си модифицираш програмата да работи с масиви char вместо string. 

Може да почнеш като добавиш думата "бъдещ" на подходящото място в подписа си После да хванеш да четеш наистина, вместо да пишеш спам по форумите. Това е сериозно - можеше да я дебъгнеш тази програма досега ако беше прочел как работят string и write. 

Здрасти! Като начало

 #include <stdlib.h>        //#include <conio.h> - това е старо

и 
вместо void main() ->  int main()  
void означава, че функцията не връща стойност. 
и 
не видях, къде декларираш "cls" 

cls e cmd команда за изчистване на екрана 

Моя компилатор не е съгласен, аз се въздържам  

void main e старото с++ 98 

for (i = 0; i < pos / sizeof(person); i++)


заменете го с 

while(!fp.eof())
{
}


да видим ко ще стане 
  
мале то много сложно това въртят се два цикъла и се заменя с lfstream 

Същото като преди. 
Само първият път ми извежда жителите и след това крашва. 
Когато я пусна пак и цъкна на извеждане на жителите крашва без да ги изведе. 

Въпросче 
Защо в началото има 

void menu();
void enter();
void izvejdane(struct person per[]);
void suzdavane();

aми мисля, че така се декларират функциите :Д 

а на ммен си ги вади всеки път и крашва 

при мен не крашва, ама и не дава инфо 


  


значи и при теб толкова работи.. как да я оправим тая чудесия??????? 

Като гледам как работи - какво прави: 
1. main 
прехвърля на 
2. menu 
избираш си вариант, ако е 1 - отива на  
3. enter 
набираш си данните и 
4. връща се пак в menu 
  
в края на enter не изпълнява 

fp.write((char*)&pp, sizeof(person));
fp.close();

Текстът в червено вероятно си го оцветил така защото не е верен? 
  
Пътят към ада е застлан с добри намерения. Св. Бернар. 

защото не го прави 
  
ps. уточнение - code::blocks + linux 

И от коя точно "точка" на функцията enter излизаме, че да не минем през тези два реда които са в края ѝ? 
Уточнението е несъществено, за разлика от резултата на входно-изходните операции(примерно), поредността на изпълнението на линеен код не зависи от ос 

изпълнението минава през операторите, на няма очаквания ефект. 
уточнението беше във връзка с предишен коментар за "1. коментарите че употребата на conio, getch и system не се препоръчва са верни, но не пречат, ако компилираш с майкрософтския компилатор." 

Това е тотално различно нещо от "не се изпълняват". 
Функциите си се изпълняват, write връща грешка (за каквато никой не проверява ) защото: 

след което close си затваря файла. 
  
Помисли над мисълта на Св.Бернар 

след като го отваря и затваря - трябва да го има физически - нали ? 
  
бях писал някъде - не ми четете думите буква по буква. не винаги се изразявам по очаквания начин 

е не що не го пише нито в един учебник тва за стринговете??? ами трябва да го науча от фларе? вече ще си ползвам само чарове кат по рано ето научих нещо от тези разговори 

Ама това са много важни разлики, не се заяждам за глупости. Значи да разбираш как върви изпълнението на кода (така наречения control flow) е изключително, ама ИЗКЛЮЧИТЕЛНО (как повече да го натъртя???) важно за всеки начинаещ и неясноти тука не трябва да има. Ако има, се зарязва всичко останало и се чете докато се изясни. Съответно, като пишеш с червени букви, че две функции в края не се изпълняват може да объркаш автора на темата. 
  

Значи в програмата има доста грешки, не са само посочените от вас и мен, аз отговорих на конкретния въпрос в темата. Не съм имал за цел да я оправям цялата, нали и авторът трябва да помисли малко. 
Това че не се създава файл, става заради грешка в много по-ранен етап, файловете се създават при отваряне, не при запис или затваряне. И във всеки случай и двете функции посочени функции се изпълняват. Може да връщат грешки, но се изпълняват. 
  
И за пореден път да отбележа този път директно. Аз не разбирам от коли. Няма да тръгна да оправям някому колата само щото ме е помолил, колкото и да имам доброто намерение да помогна. Нали може да предизвика катастрофа и после на моята съвест ще тежи. Моля, съобразявайте се със знанията си при опитите за помощ. Иначе вредите. 

И кой е учебника? И ако някъде кажеш, че аз съм казал да ползваш само char вместо стринг, ще се оплача на арменския поп, омбудсмана и съда в Хага. С две думи ти си го измисли това. Тоест аз пиша "това не се прави така", ти разбираш "това не може да се направи" или "въобще не трябва да се прави" или каквото там си си измислил, вместо да си зададеш правилният въпрос - щом не се прави така, то как се прави и дай да се науча аджеба да го правя като хората. 

ами много са ама такова чудо не бях чел за стринговете и файловете 
например магдалина тодорова. абсолютно С++ с++ за всеки и други 

Оффф. от поста ти съдя че нищо съществено не си разбрал. 
Извинявай, ама имаш гигантски пробойни в обучението. Ако искаш може да отвориш друга тема и да си говорим за статично и динамично заделяне на паметта и как се работи с класове, които го ползват. 

ще се радвам да науча нещо от всеки даже си имам темичка всичко за един лев с цел да не спамя по темите 
