Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2013, 11:38   #1
DeCIIoT
Пользователь
 
Регистрация: 20.10.2012
Сообщений: 21
По умолчанию Программа на C++!!!

Задача: Вводить данные в соответствии приведенной ниже структуре. Введенные данные сохранять в файле структур. Если файл уже существует, отразить его содержимое на экран монитора, а затем позволить добавить в него новые данные. Новые данные вводить в массив структур mas, а затем весь массив (нужное количество записей, то есть без учета того, что в нем уже находилось раньше) записать в файл.
Описать структуру с именем NOTE, содержащую следующие поля:
Фамилия, имя;
Номер домашнего телефона;
Номер мобильного телефона;
После 7 ввода данных программа начинает работать криво, некоторые данные не вводятся(домашний и мобильный телефон).
DeCIIoT вне форума Ответить с цитированием
Старый 07.05.2013, 11:48   #2
DeCIIoT
Пользователь
 
Регистрация: 20.10.2012
Сообщений: 21
По умолчанию

Код:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#define max_name 50                                                                               
#define max_family 50                                                                                                                                                             
#define max_bibl 2 
using namespace std;                                                                               
struct note 
{                                                                                     
char name [max_name];                                                                    
char family [max_family];                                                                    
float nomer_Dom; 
float nomer_Mob;                                                                             
};
int main()
{ setlocale(LC_CTYPE,"Russian");
struct note bibl[max_bibl];                                                                      
int c_note=0;                                                                                    
int c;
int i;                                                                                           
int file_c_note;                                                                                 
FILE *fp;                                                                                        
int size=sizeof(struct note);                                                                    
if ((fp=fopen ("note.dat","a+b"))==NULL)
{fputs("Íåâîçìîæíî îòêðûòü ôàéë note.dat\n",stderr);
exit(1);                                                                                           
}
rewind(fp);                                                                                        
while((c_note<max_bibl)&&(fread(&bibl[c_note],size,1,fp))==1)
     {if (c_note==0)                                                                               
	 puts("'Òåêóùåå ñîäåðæèìîå ôàéëà  note.dat:");
     printf("%s,%s:%.2f\n", bibl[c_note].name,bibl[c_note].family, bibl[c_note].nomer_Dom, bibl[c_note].nomer_Mob);
                                                                                                   
     c_note++;                                                                                     
     }                                                                                             
file_c_note=c_note;                                                                                
if (c_note==max_bibl)                                                                              
                                                                                                   
   {fputs("Ôàéë note.dat Ïåðåïîëíåí. Äîáàâëåíèå íåâîçìîæíî. \n ",stderr);
   exit(2);
   }
                                                                                                      
while((c_note<max_bibl)&&                                                                                                    
     (gets(bibl[c_note].name)!=NULL)&&
     (bibl[c_note].name[0]!='\0'))
     {
     puts("Ââåäèòå èìÿ:");
     gets(bibl[c_note].name);
     puts("Ââåäèòå ôàìèëèþ :");
     gets(bibl[c_note].family);
     puts("Óêàæèòå íîìåð äîìàøíåãî òåëåôîíà:");
     cin >> bibl[c_note].nomer_Dom;
     puts("Óêàæèòå íîìåð ìîáèëüíîãî òåëåôîíà:");
     cin >> bibl[c_note].nomer_Mob;
     while (getchar()!='\n')
	   continue;                                                                                                              
    if(c_note<max_bibl);
}                                                                                                                             
puts("Ïîëíûé ïåðå÷åíü èìåí:");
for(i=0;i<c_note;i++)
printf("%s,%s:%.2f\n",bibl[i].name, bibl[i].family, bibl[i].nomer_Dom, bibl[i].nomer_Mob );                                                     
fwrite(&bibl[file_c_note],size,c_note-file_c_note,fp);
fclose(fp);                                                                                                                    
getch();                                                                                                                    
return 0;                                                                                                                       
}
DeCIIoT вне форума Ответить с цитированием
Старый 07.05.2013, 12:03   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Я бы посоветовал хранить номера телефона как строки. Потому как мобильный номер телефона банально не влазит в размер float. Отсюда скорее всего и ошибка. Выпадаете за пределы допустимой памяти.
Float это 4 байта ... так например номер 9212828282 будет усечен до 921282828 [2]
а двойка выскочит фиг знает куда ...
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 07.05.2013, 13:41   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Float это 4 байта ... так например номер 9212828282 будет усечен до 921282828 [2]
а двойка выскочит фиг знает куда ...
*подобрал челюсть с пола*
Что?!
Код:
printf("%s,%s:%.2f\n", bibl[c_note].name,bibl[c_note].family, bibl[c_note].nomer_Dom, bibl[c_note].nomer_Mob)
Количество дополнительных аргументов, переданных printf (4), не совпадает с количеством аргументов, описываемых форматной строкой (3).
Код:
while((c_note<max_bibl)&&                                                                                                    
     (gets(bibl[c_note].name)!=NULL)&&
     (bibl[c_note].name[0]!='\0'))
     {
     puts("Ââåäèòå èìÿ:");
     gets(bibl[c_note].name);
Двойной gets(bibl[c_note].name) не смущает?
Вообще, что в условии цикла делает c_note<max_bibl, если c_note в цикле не меняется? Попробуйте выводить на каждой итерации поля bibl[c_note] и смотрите, что у Вас происходит.
Код:
fwrite(&bibl[file_c_note],size,c_note-file_c_note,fp);
В Вашем случае c_note-file_c_note == 0.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на Pascal в Lazarus и программа для одномерного массива целых чисел Yegorka Lazarus, Free Pascal, CodeTyphon 13 20.12.2012 18:02
Программа как программа. вопрос leonidsm Общие вопросы C/C++ 5 02.10.2012 21:30
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль, Turbo Pascal, PascalABC.NET 12 14.10.2009 20:09