Форум программистов, компьютерный форум CyberForum.ru

Отчет - C++

Восстановить пароль Регистрация
 
Dioxis
1 / 1 / 0
Регистрация: 04.03.2009
Сообщений: 83
14.04.2010, 18:10     Отчет #1
Помогите выловить ошибку. Суть: сопоставить с данными в тексте и вывести информацию по товару. Текст программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# include <fstream.h>
# include <string.h>
# include <stdlib.h>
# include <windows.h>
 
 
 
int main ()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    const int 
        l_name=30, 
        l_mag=15, 
        l_cost=10, 
        l_buf=l_name + l_mag + l_cost;  
    struct Price                                                
    {
        
        char name[l_name+1];
        char mag[l_mag+1];
        float cost;
    };
 
    const int l_price = 100;
    Price total[l_price];                  
    char buf[l_buf+1];              
    char name[l_name+1];                
    ifstream fin("price.txt", ios::in | ios::nocreate); 
 
        if(!fin)                               
        {
            cout <<"Ошибка открытия файла" << endl;
            return 1;
        }
    
    int i=0;                        
    while (!fin.eof())
    { 
        fin.getline(buf,l_buf);
        if (i > l_price)
        {
            cout << "Слишком длинный файл"<< endl;
            return 1;
        }
        strncpy(total[i].name, buf, l_name);
        //strncpy(total[i].mag, buf, l_mag);
        total[i].name[l_name] = '\0';
        total[i].name[l_mag] = '\0';;
        total[i].cost = atof(&buf[l_name + l_mag]);
        i++;
    }
    
    int n_record = i, n_man = 0;                                 
    float mean_pay = 0;
 
    while (true)                                        
    {
        cout << "Введите название товара или end:";
        cin.getline (name,30);                          
        if (strcmp(name, "end") == 0)   break;                   
        bool not_found = true;                              
        for (i=0; i<n_record; i++)                                
        {
            if (strstr(total[i].name, name))                    
                if (total[i].name[strlen(name)] == ' ')           
                {
                    strcpy(name, total[i].name);
                    //OemToChar(total[i].mag,total[i].mag);                        
        cout << name << total[i].mag << "  " << total[i].cost << endl;
 
                    not_found = false;
                }
        }
    if (not_found)   
        cout <<"Нет подходящего овара"<< endl;
    }
    
return 0;
}
Текст price.txt:(Может парсер порезать)
Хлеб Петровский 3.40
Молоко ЦУМ 2.50
Сладкая вода Левобережный 5.20
Конфеты Кишеня 8.60
Сыр Петровский 45.00
Мясо Левобережный 52.50
Колбаса ЦУМ 46.30
Птица Петровский 32.00
Выводит имя товара и цену нормально, а имя магазина: МММММММММ
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2010, 18:10     Отчет
Посмотрите здесь:

неправильный отчет C++
C++ Помогите создать отчет с собственным окном просмотра
Программа формирующая отчет об аппаратном обеспечении пк C++
отчет C++
Отчет РАУЗ переделать в отчет с партионным учетом 1С 1C 8.x
База данных с++ "Добыча угля" (Отчет по практике) C++
C++ Транспонирование, умножение и вычитание матриц, отчет в Mathcad

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
14.04.2010, 18:21     Отчет #2
Цитата Сообщение от Dioxis Посмотреть сообщение
Молоко ЦУМ 2.50
Сладкая вода Левобережный 5.20
Конфеты Кишеня 8.60
Не считая того, что сама программа странная, как ситуацию с полями из нескольких слов разруливать? Понятно, что молоко в ЦУМе, а вот с водой уже засада... Можно, конечно, заглавные буквы отлавливать, но как-то хлопотно. Это я к тому, что пробел в качестве разделителя полей в файле не самый подходящий символ, лучше классический ';' ну или '|'...
Dioxis
1 / 1 / 0
Регистрация: 04.03.2009
Сообщений: 83
14.04.2010, 18:26  [ТС]     Отчет #3
Я переделывал с образца, поэтому вопросы скорее к литературе чем к программе. А за воду спасибо, не заметил, хотя сути вопроса не меняет
Yandex
Объявления
14.04.2010, 18:26     Отчет
Ответ Создать тему
Опции темы

Текущее время: 15:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru