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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
zoker
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 8
#1

не могу понять что не так - C++

24.12.2009, 11:33. Просмотров 557. Ответов 5
Метки нет (Все метки)

задание такое :
Структура "книга почтой":-наименование книги;-ФИО автора;-номер по каталогу;-издательство;-колличество в наличии(шт.);-стоимость книги.
Пользователь вводит номера по каталогу книг через пробел.Программа должна вывести список на экран ,с итоговой стоимостью.При этом каждой из них в списке необходимо уменьшить на 1 значение в поле "количество в наличии".Если количество равно 0,то такую запись необходимо удалить.Добавить новую "книгу почтой " в конец списка с введенными пользователем характеристиками.

Проблема: функция gets не срабатывает, следствие то что перебрасывает через 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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include "stdafx.h"
#include "stdio.h"
#include "student.h"
#include "stdlib.h"
#include "conio.h"
 
struct books
{
    char name[50];
    char writer[100];
    int number;
    char publisher[50];
    int amount;
    int price;  
}book[50];
 
int num_book=0,size=0;
 
void input ()
{
    char a[2];
    FILE *fp=fopen("books.txt", "wb");
    if (fp==NULL){printf(Rus("Ошибка при создании файла\n"));exit(0);};
    for(int i=0;i<99;i++)
    {
        printf(Rus("Название: "));  gets(book[i].name);
        printf(Rus("Автор: "));     gets(book[i].writer);   
        book[i].number=i+1;
        printf(Rus("Издательство: "));gets(book[i].publisher);
        printf(Rus("На складе: ")); scanf("%d",&book[i].amount);
        printf(Rus("Цена: "));      scanf("%d",&book[i].price);
        fwrite(&book[i], sizeof(book[i]),1,fp);
        num_book++;
        if (ferror(fp)!=NULL){printf(Rus("Ошибка при записи файла\n"));exit(0);};
        printf(Rus("\nЕсли хотите добавить еще одну книгу, нажмите Y ")); scanf("%s",&a);
        printf("\n");
        if(a[0]!='Y')break;
    }
    fclose(fp);
}
 
 
void number()
{
    int i,a,itog=0;
    char number[100];
    FILE *fp=fopen("books.txt", "r+b");
    if (fp==NULL){printf(Rus("Ошибка при создании файла\n"));exit(0);};
    printf("\n");
    printf(Rus("Введите номера книг по каталогу(меньше %d):\n"),num_book);
    gets(number);
    for(i=0;i<99;i++)
    {
        if(number[i]=='\0')break;
        if(number[i]>=0x30 && number[i]<=0x39)
        {
            if(number[i+1]>=0x30 && number[i+1]<=0x39)
            {
                if((number[i]+10*number[i+1])<=num_book)
                {
                    fread(&book[number[i]+10*number[i+1]], sizeof(book[i]), 1, fp);
                    printf(Rus("Название: %s\n"),book[i].name);
                    printf(Rus("Автор: %s\n"),book[i].writer);  
                    printf(Rus("Номер по каталогу: %d\n"),book[i].number);
                    printf(Rus("Издательство: %s\n"),book[i].publisher);
                    printf(Rus("На складе: %d\n"),book[i].amount);
                    printf(Rus("Цена: %d\n\n"),book[i].price);
                    book[i].amount--;
                    itog+=book[i].price;
                }
            }
        }
    }
    printf("\n-------------------------\n");
    printf(Rus("Итоговая сумма: %d\n"),itog);
    for(i=0;i<num_book;i++)
    {
        size+=sizeof(book[i]);
        fwrite(&book[i], sizeof(book[i]),1,fp);
    }
    fclose(fp);
}
 
void add()
{
    FILE *fp=fopen("books.txt", "r+b");
    if (fp==NULL){printf(Rus("Ошибка при открытии файла\n"));exit(0);};
    printf("\n");
    fseek(fp,long(size),SEEK_SET);
    printf(Rus("Название: "));  gets(book[num_book].name);
    printf(Rus("Автор: "));     gets(book[num_book].writer);    
    book[num_book].number=num_book+1;
    printf(Rus("Издательство: "));gets(book[num_book].publisher);
    printf(Rus("На складе: ")); scanf("%d",&book[num_book].amount);
    printf(Rus("Цена: "));      scanf("%d",&book[num_book].price);  
    printf("\n");
    num_book++;
    fwrite(&book[num_book], sizeof(book[num_book]),1,fp);
    fclose(fp);
}
 
void print()
{
    int i;
    FILE *fp=fopen("books.txt", "rb");
    if (fp==NULL){printf(Rus("Ошибка при создании файла\n"));exit(0);};
    printf("\n");
    printf(Rus("\nКаталог:\n\n"));
    if(num_book==0)num_book=1;
    for(i=0;i<num_book;i++)
    {
        fread(&book[i], sizeof(book[i]), 1, fp);
        printf(Rus("Название: %s\n"),book[i].name);
        printf(Rus("Автор: %s\n"),book[i].writer);  
        printf(Rus("Номер по каталогу: %d\n"),book[i].number);
        printf(Rus("Издательство: %s\n"),book[i].publisher);
        printf(Rus("На складе: %d\n"),book[i].amount);
        printf(Rus("Цена: %d\n\n"),book[i].price);
        printf("\n");
    }
    printf("\n");
    fclose(fp);
}
 
int main()
{
    int choise;
    bool flag=1;
    while(flag)
    {
        printf(Rus("Нажмите\n\t1-Для ввода книг в каталог\n\t2-Для ввода номеров и получения списка нужных книг\n\t3-Для добавления книги в конец каталога\n\t4-Для получения списка книг в наличии\n\t5-Для выхода из программы\n"));
        scanf("%d",&choise);
        printf("\n");
        switch(choise)
        {
            case 1:input();break;
            case 2:number();break;
            case 3:add();break;
            case 4:print();break;
            case 5:flag=0;break;
            default:printf("Неизвестная комманда\n");
        }
    }
    getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2009, 11:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос не могу понять что не так (C++):

не могу понять что не так((((( - C++
привет всем! у меня проблемка возникла компиятор никак не проглатывает мой код #include &lt;iostream&gt; using namespace std; int main() ...

Не могу понять, что не так в коде - C++
Целый день маюсь с этой прогой и ничё не выходит. #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main() { ...

Обьясните что не так не могу понять - C++
программа должна менять цвет bmp файла но при запуске выдает ошибку что 2 неразрешимых внешних элемента есть и все я пробовал разобраться...

не могу понять что не так ( подскажите пожалста - C++
#include &lt;iostream&gt; using namespace std; double vvid_chusla( char*a) { cout&lt;&lt; &quot; Введiть &quot;&lt;&lt;a&lt;&lt;&quot;=&quot;; char b; cin.getline(b,9); ...

C2061 ошибка, не могу понять что не так - C++
Заголовочный файл: Forces.h #ifndef _FORCES_ #define _FORCES_ #include &quot;ParticleSystem.h&quot; // Абстрактный класс силы class...

Передача массива в функцию. Не могу понять что не так - C++
Добрый вечер. Помогите, пожалуйста, решить проблему. Задание такое: Дана целочисленная прямоугольная матрица, все элементы которой...

5
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
24.12.2009, 12:29 #2
Цитата Сообщение от zoker Посмотреть сообщение
функция gets не срабатывает,
Перед вызовом этой функции напишите:
C
1
_flushall();
1
zoker
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 8
24.12.2009, 12:57  [ТС] #3
после проверки выяснилось что
функция namber не правильно работает
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.12.2009, 05:21 #4
Цитата Сообщение от zoker Посмотреть сообщение
после проверки выяснилось что
функция namber не правильно работает
я об этом догадывался. А что должна эта функция выполнять? Полностью опишите все что должна выполнять эта функция.
0
zoker
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 8
26.12.2009, 00:28  [ТС] #5
спасибо уже разобрался во всём))
0
zoker
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 8
09.01.2010, 13:55  [ТС] #6
понял что до конца не разобрался , в данной программе проблема такого рода , что она записывает в файл , сохраняет в нем , при выходе из самой программы (в меню 5 пункт) должно всё оставаться , при запуске программы заново она показывает только первую книгу которую я вбил в прошлом заходе,

предположительно проблема в
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void print()
{
        int i;
        FILE *fp=fopen("books.txt", "rb");
        if (fp==NULL){printf(Rus("Ошибка при создании файла\n"));exit(0);};
        printf("\n");
        printf(Rus("\nКаталог:\n\n"));
        if(num_book==0)num_book=1;
        for(i=0;i<num_book;i++)
        {
                fread(&book[i], sizeof(book[i]), 1, fp);
                printf(Rus("Название: %s\n"),book[i].name);
                printf(Rus("Автор: %s\n"),book[i].writer);      
                printf(Rus("Номер по каталогу: %d\n"),book[i].number);
                printf(Rus("Издательство: %s\n"),book[i].publisher);
                printf(Rus("На складе: %d\n"),book[i].amount);
                printf(Rus("Цена: %d\n\n"),book[i].price);
                printf("\n");
        }
        printf("\n");
        fclose(fp);
}
если тут
C++
1
if(num_book==0)num_book=1;
; значение 1 поменять на 5 или 10 еще норм и всё работает Но если более то начинает выдавать пустые книги ,я так понимаю надо что б в цикле нумеровало каждую книгу и потом выводило все колличество введеных книг
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2010, 13:55
Привет! Вот еще темы с ответами:

Проверьте программу на ошибку, не могу понять что не так - C++
#include &lt;iostream.h&gt; main() { int a, i, j, t; for(i = 0; i &lt;=10; i++) for(j = 0; i &lt;=10; i++) {if j&lt;=i || j&gt;=(11-i) a=1; ...

Определить класс Gradebook: Не могу понять что не так - C++
Учусь по книге &quot;Дейтел Х., Дейтел П. Как программировать на C++ (5-е издание, 2008)&quot; учусь 2 дня, не ругайтесь пожалуйста если что то...

Програма не работает почему то, не могу понять что не так - C++
Я написал програму которая должна выводить текст на екран. Если все в олном файле все норм работает. но я решил создать клас и немного коду...

Ткните, пожалуйста, носом в ошибку. я не могу понять где, что не так - C++
#include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;RUSSIAN&quot;); cout &lt;&lt; &quot;Сколько чисел мы будем...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
09.01.2010, 13:55
Ответ Создать тему
Опции темы

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