Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> файлы, Поиск структуры в файле 
:(
    Опции темы
Павлуха
Дата 23.5.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 19.5.2006

Репутация: нет
Всего: нет



Программа осуществляет добавление, вывод и поиск структуры Человек - ФИО
                                                                                                                        - адрес
                                                                                                                        - телефонный номер
                                                                                                                        - возраст
Помогите, пожалуйста, с поиском........... 
Код

#include<stdio.h>
#include<conio.h>
#include<iostream.h>

struct chelovek
{ 
  char fio[40];
  char adress[100];
  unsigned int number;
  int vozrast;
};
chelovek mas [100];
int kol;
void viv();
void dob();
void poisk();
int menu();
void main()
{
    while(1)
    {switch (menu())
        {    case 1: dob(); break;
            case 2: viv(); break;
            case 3: poisk(); break; 
            case 4: return;}}}            
        int menu()
    {
        int ch;
            printf("\tMENU\n");
            printf("Vibirite variant:\n");
            printf("Dobavit element - 1\n");
            printf("Vivesty element - 2\n");
            printf("Nnajti element - 3\n");
            printf("EXIT - 4\n");
            scanf("%d",&ch);
        return ch;
    }
void dob()
{
struct chelovek mas[100];
    FILE *f;
if (!(f= fopen("readme.txt", "ab")))
    {
        printf ("OSHIBKA\n");    
        return;
    }
    
do    {
    
    printf ("Vvedite F.I.O.:");
    fflush (stdin);
    gets (mas[kol].fio);

    if (!mas[kol].fio[0]) break;
    printf("Vvedite adress:");
    fflush(stdin);
    gets (mas[kol].adress);
    printf("Vvedite nomer telephona:");
    scanf("%d",&mas[kol].number);
    printf("Vvedite vozrast:");
    scanf("%d",&mas[kol].vozrast);
    fwrite (&mas[kol],sizeof (mas[kol]),1,f);
    kol ++;
    }while (1);        
    fclose (f);
}
void viv()
{
    struct chelovek mas[100];
    FILE *f;
if (!(f= fopen("readme.txt", "rb")))
    {
        printf ("OSHIBKA\n");    
        return;
    }
    printf("\nSpisok:\n");
  
  if(!(f=fopen("readme.txt","rb")))
  {
     printf("OSHIBKA\n");
  }
  while(1)
  {
    if(sizeof(mas[kol]) != fread(&mas[kol], 1, sizeof(mas[kol]), f)) 
      break;   
  printf("  F.I.O.:%s\n  Adress:%s\n  Telephone:%d\n  Vozrast:%d  \n\n\n", mas[kol].fio, mas[kol].adress, mas[kol].number, mas[kol].vozrast);
  }
  fclose(f);
}
void poisk()
{
    char mat[20];
    printf("Vvod:");
    scanf("%s",&mat[20]);
    
FILE *f;
if (!(f= fopen("readme.txt", "rb")))
    {
        printf ("OSHIBKA\n");    
        return;
    }
    printf("\nSpisok:\n");
if(!(f=fopen("readme.txt","rb")))
  {
     printf("OSHIBKA\n");
  }
  while(1)
  {
    if(sizeof(mas[kol]) != fread(&mas[kol], 1, sizeof(mas[kol]), f)) 
    break;   
 
    
if(mat[20]= mas[100].fio) // error C2440: '=' : cannot convert from 'char [40]' to 'char'
        This conversion requires a reinterpret_cast, a C-style cast or function-style cast
        
printf("  F.I.O.:%s\n  Adress:%s\n  Telephone:%d\n  Vozrast:%d  \n\n\n", mas[kol].fio, mas[kol].adress, mas[kol].number, mas[kol].vozrast);
  }
  fclose(f);
}



Что это за ошибка, как енё исправить? 
PM MAIL   Вверх
MAKCim
Дата 23.5.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Код

fread(&mas[kol], 1, sizeof(mas[kol]), f);


надо
Код

fread(&mas[kol],sizeof(chelovek),1,f);

+ kol у тебя вроде не изменяется 
Цитата

scanf("%s",&mat[20]);

тут выход за диапозон!
Цитата

if(mat[20]= mas[100].fio)

так строки не сравнивают
нужно
Код

if (strcmp(mat,mas[100].fio));

причем mas[100] судя по всему - это тоже выход за диапозон
и вообще код несколько корявый  

Это сообщение отредактировал(а) MAKCim - 23.5.2006, 13:48


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Павлуха
Дата 23.5.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 19.5.2006

Репутация: нет
Всего: нет



что значит выход за диапозон?
 
PM MAIL   Вверх
pablo
Дата 23.5.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



Цитата
что значит выход за диапозон?


например если у тебя массив из 10 елементов то они нумерируются от 0 до 9, если пытаешся получить елемент с индексом 10 то выходиш за диапазон массива. 


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Кнером
Дата 26.5.2006, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Павлуха, если вы не хотите использовать преимущества С++, то наверное
лучше будет писать на чистом С. Теоритически, размер приложения будет меньше.

Я не так давно изучаю С++ и не понимаю, зачем использовать функции и другое из С
в cpp проектах, собирать это все компилятором С++.
Как я знаю, С++ разделяется на два стандарта:
- традиционный (поддерживает С)
- стандартный (стандарт ANSI/ISO, должна быть реализована во всех современных компиляторах С++)

Традиционный возможно съест то, что вы написали. Хотя в коде много ошибок.
И это как я понимаю не хороший стиль программирования.
А стандартный должен дать оплевуху.

Не так давно купил книгу по С++. Если я ничего не путаю, то в действительности она
о С. Сейчас с этим буду разбираться. Возможно у вас такая проблема.

Добавлено @ 00:13 
Не понятно, зачем в С++ используют printf в место cout << и т.д.
Так же если используется Standard C++, почему в заголовках присуствует .h.

Это сообщение отредактировал(а) Кнером - 26.5.2006, 00:12
PM MAIL WWW ICQ   Вверх
bsa
Дата 26.5.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Все очень просто. printf более удобен при форматировании. Попробуй через iostream выведи таблицу, поля которой чередуются (шестнадцатиричная/десятичная). Я посмотрю на тебя, когда ты это реализуешь. smile
Borland C++ 3.1 на #include <iostream> выдает ошибку: Unable to open include file 'IOSTREAM'
Кстати, операция printf быстрее операции cout << (зайди на http://www.boost.org, там в описании библиотеки format есть тестирование). 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.