******%
*****%
****%scanf("%s", *books[i].name); Вы вместо указателя на имя передаёте значение первого символа, правильно:scanf("%s", books[i].name);scanf("%d", books[i].price);
scanf("%d", books[i].page_n);
scanf("%d", books[i].pubhouse.year); Вы вместо адреса переменной передаёте её значение, правильно:scanf("%d", &(books[i].price));
scanf("%d", &(books[i].page_n));
scanf("%d", &(books[i].pubhouse.year)); std::vector<SomeValueType> pingAddr;, то можно писать for(auto iter=pingAddr.begin();iter!=pingAddr.end();iter++)
{
SomeValueType& v = *iter;
avrPing += v.getResult().avrRTT; //автодополнение будет работать,
//а код все равно проще, чем если писать название типа вместо auto
i++;
} fd = fopen( filename, "wb" );
write( fd, i_regions, sizeof( i_regions ) );
fclose( fd );