Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 4
Регистрация: 04.03.2009
Сообщений: 83
1

Отчет

14.04.2010, 18:10. Просмотров 1215. Ответов 2
Метки нет (Все метки)

Помогите выловить ошибку. Суть: сопоставить с данными в тексте и вывести информацию по товару. Текст программы:

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
Выводит имя товара и цену нормально, а имя магазина: МММММММММ
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2010, 18:10
Ответы с готовыми решениями:

отчет
у кого нибудь есть отчет по пр-ке в библиотеке

неправильный отчет
так вот. Когда я ввожу число &gt; 99, к примеру число 555 или 444,то всегда выводит happy. Не happier,...

Отчет по заработной плате
В конце мая фирма формирует отчет по заработной плате 12 сотрудников за весенний квартал. Написать...

Программа формирующая отчет об аппаратном обеспечении пк
нужна прога которая работает как модуль, формируюет отчет об аппаратном обеспечении пк и этот отчет...

2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10875 / 6763 / 1619
Регистрация: 25.07.2009
Сообщений: 12,483
14.04.2010, 18:21 2
Цитата Сообщение от Dioxis Посмотреть сообщение
Молоко ЦУМ 2.50
Сладкая вода Левобережный 5.20
Конфеты Кишеня 8.60
Не считая того, что сама программа странная, как ситуацию с полями из нескольких слов разруливать? Понятно, что молоко в ЦУМе, а вот с водой уже засада... Можно, конечно, заглавные буквы отлавливать, но как-то хлопотно. Это я к тому, что пробел в качестве разделителя полей в файле не самый подходящий символ, лучше классический ';' ну или '|'...
0
1 / 1 / 4
Регистрация: 04.03.2009
Сообщений: 83
14.04.2010, 18:26  [ТС] 3
Я переделывал с образца, поэтому вопросы скорее к литературе чем к программе. А за воду спасибо, не заметил, хотя сути вопроса не меняет
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2010, 18:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Помогите создать отчет с собственным окном просмотра
Здравствуйте! Если кто-нибудь знает решение моей задачи, подскажите, очень нужно. А задача...

Транспонирование, умножение и вычитание матриц, отчет в Mathcad
Помогите пожалуйста написать программу, нужно в С++ сделать программу транспонирующий, умножающий,...

Сформировать отчет о количестве потребленных лекарств краткосрочного и пролонгированного действия
В больнице на учете находятся инсулинозависимые граждане. Каждый из них пользуется предложенными...

Вывести отчет о товарах, которые были возвращены в магазин за текущий день
в кассе магазина видеться запись о проданных товарах. записи ведуться ежедневно и включают в себя...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.