Премини към съдържанието

Препоръчан отговор


Здравейте! Имам нужда от малко помощ. Направих си курсовата работа уж, но накрая ми изписва грешка "uninitialized local variable 'datGod' used" и не знам какво да правя вече... :/

Ето го кода:

/*Да се състави програма, която съхранява в масив следната информация за лекарствата в една аптека:
-наименование
-цена
-налично количество
-срок на годност ( дата, до която е годно)
и извършва следните операции, избрани от меню:
- добавя към масив данните на ново лекарство;
-извежда списък с данните на всички лекарства;
-извежда сумата на лекарствата, чийто срок на годност изтича на посочена дата
-създава нов масив с данните на лекарствата с налични количества под 10 броя или цена под 12 броя.
*/

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

using namespace std;

class Data{
public:
	int D, M, G;
	void inDat();
	void outDat();
};

void Data::inDat(){
	cout << "Въведете ден: "; cin >> D;
	cout << "Въведете месец: "; cin >> M;
	cout << "Въведете година: "; cin >> G;
}

void Data::outDat(){
	cout << "Ден: " << D << "Месец: " << M << "Година: " << G << endl;
}

class Lekarstva{
public:
	char naimenovanie[31];
	float cena;
	int kolich;
	Data datGod;
	Data tekDat;
	void izvedi();
	void getData();
	void display();
};

void Lekarstva::getData(){
	cin.ignore();
	Data datGod;
	cout << "Наименование: "; cin.getline(naimenovanie, 30);
	cout << "Единична цена: "; cin >> cena;
	cout << "Количество: "; cin >> kolich;
	cout << "Срок на годност: \n"; datGod.inDat();
}

void Lekarstva::display(){
	cin.ignore();
	Data datGod;
	cout << "Наименование: " << naimenovanie << "\nЕдинична цена: " << cena << "\nКоличество: " << kolich;
	cout << "\nСрок на годност: "; datGod.outDat();
}

//Извежда сумата на лекарствата, чийто срок на годност изтича на посочената дата.
void izvejdane(Lekarstva mas[], int br){
	Data tekDat;
	Data datGod;
	float suma = 0;
	cout << "Въведете текуща дата: "; tekDat.inDat();
	for (int i = 0; i<br; i++)
	if (tekDat.D == datGod.D&&tekDat.M == datGod.M&&tekDat.G == datGod.G)
	{
		suma += mas[i].cena*mas[i].kolich;
		cout << "Сумата е: " << suma;
	}
}




void main(){
	system("chcp 1251");
	char kod;
	int brlek = 0, i;
	Lekarstva apteka[10];
	do{
		cout << "Меню на изпълняваните операции\n";
		cout << "1 - Ново лекарство\n";
		cout << "2 -Всички лекарства\n";
		cout << "3 -Лекарства с изтекъл срок на годност към посочената дата\n";
		cout << "4 -Лекарства с налични количества под 10 броя или цена под 12лв.\n";
		cout << "Въведете код за операция или 0 за край!\n"; cin >> kod;
		switch (kod){
		case'0':break;
		case'1':apteka[brlek++].getData(); break;
		case'2':for (i = 0; i<brlek; i++)apteka[i].display(); break;
		case'3':izvejdane(apteka, brlek); break;
		default:cout << "Въведен е грешен код!\n";
		}
	} while (kod != 0);
}

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
void izvejdane(Lekarstva mas[], int br){
	Data tekDat;
	Data datGod;
	float suma = 0;
	cout << "Въведете текуща дата: "; tekDat.inDat();
	for (int i = 0; i<br; i++)
	if (tekDat.D == datGod.D&&tekDat.M == datGod.M&&tekDat.G == datGod.G)
	{
		suma += mas[i].cena*mas[i].kolich;
		cout << "Сумата е: " << suma;
	}
}

На третия ред декларираш в стека дата на годност.

След това никъде не я инициализираш, а на седмия ред я използваш без да си я инициализирал в иф стейтмънта.

Когато декларираш променлива в стека, тя не се инициализира автоматично. Трябва ръчно да я инициализираш.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 26 минути, Реджеп Иведик написа:

void izvejdane(Lekarstva mas[], int br){
	Data tekDat;
	Data datGod;
	float suma = 0;
	cout << "Въведете текуща дата: "; tekDat.inDat();
	for (int i = 0; i<br; i++)
	if (tekDat.D == datGod.D&&tekDat.M == datGod.M&&tekDat.G == datGod.G)
	{
		suma += mas[i].cena*mas[i].kolich;
		cout << "Сумата е: " << suma;
	}
}

На третия ред декларираш в стека дата на годност.

След това никъде не я инициализираш, а на седмия ред я използваш без да си я инициализирал в иф стейтмънта.

Когато декларираш променлива в стека, тя не се инициализира автоматично. Трябва ръчно да я инициализираш.

Благодаря ти много за помощта! Оправи се :)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.


  • Разглеждащи това в момента   0 потребители

    Няма регистрирани потребители разглеждащи тази страница.

  • Горещи теми в момента

  • Подобни теми

    • от plamito0o12
      Здравейте,може ли някой да ми помогне с едни задачи по Синтез и анализ на алгоритми..
      1. задача: Да се състави функция за копиране на дадена опашка (динамична и статична реализация).
      2. задача: Да се състави функция ,инициализараща дек с 10 целочислени елемента със стойност 0.
      3. задача: Да се състави функция за изчисляване на биномиалните коефиценти за n>=m>=0,чрез използването на динамичното програмиране: (n,m)=n!/(m!.(n-m)!)
      Ще ви бъда много благодарна!
       
    • от Nikitobee
      Добър ден дами и господа! 
       
      Един малък проблем, след стартиране на програма за намиране на корен, прикачвам кода
       
      /* Дано ви хареса програмата :)*/ #include<iostream> #include<math.h> #include<conio.h> using namespace std; int main(void) { int num,ans; cout <<"Enter random number: "; cin >>num; ans=pow(num,0.5); cout <<"\n The root of "<<num<<" is: "<<ans; return 0; Когато я компилирам и стартирам, програмата си намира корен от число, и няма никакви проблеми.
      Но когато стартирам самото exe, и въведа число, натисна Enter... И тадааа - Програмата се затваря автоматично без да прави каквото и да било! 
      Опитах се да добавя един 
      system("pause") Натискам enter, след това ми изписва както съм въвел в програмата " Enter random number", въвеждам число и - пак се затваря автоматично.
      Във вторник ще трябва да я покажа в училище, но ако не оправя това, ще ми стане малко гадно..
      EDIT: Става дума когато пак се стартира от exe-то.  :@ 
    • от z0sk1e
      Здравейте, 
      Преди няколко дни реших да изчистя лаптопа и да му сменя термо-пастата. След като го сглобих стартирах системата и ми даде грешка при Системния вентилатор. Предположих че съм забравил пин-а несвързан но уви 1/4 кабели беше скъсан. Правих се на заварчик със запалката, но не успях да подкарам вентилатора. След което поръчах нов, но и той не тръгва. Търсих възможности, които да оправят положението но безуспешно.. 
      Остана ми да пробвам само да флашна биоса, но някак си ми е трудно, защото защитата за висока темп. го изключва. 
      HP Elitebook 8560w workstation
      Някакви идея, кое, как? 
    • от m.dimitrov98
      Здравейте, имам ето това задание:
      Големи числа се наричат цели положителни числа с К цифри. Големите цели числа могат да се представят с помощта на линеен едносвързан списък, всеки елемент на който съдържа точно една цифра от числото. Дадени са две големи цели числа N1 и N2 (до 100 цифри). Да се напишат програмни фрагменти за :
                a. Представяне на числата чрез списъци;
                b. Сумиране на две големи цели числа.
      Бях го направил с две функции create1 и create2 и две променливи N1 и N2, но професорката иска да е само един и колкото числа искам да въведа толкова пъти да извикам един и същ create. Опитах по този начин но при започване на въвеждането на второто число програмата блокира. Бих бил благодарен ако някой помогне.
      Ето и до къде съм стигнал.
       
       
      #include <iostream> using namespace std; struct chislo{ int N; chislo* next; }; typedef chislo* Point; Point Head; void Create(Point &Head) { Point Last, P; Last=NULL; int brc=0; int br=0; cout<<"Колко цифри ще е числото?: "; cin>>br; while (brc != br) { P = new chislo; brc++; cout << brc <<" цифра на числото: "; cin >> P->N; P->next=NULL; if (Head == NULL) Head = P; else Last->next = P; Last = P; } } void Traverse(Point P){ cout<<"Числото е:"; while (P !=NULL) { cout<<P->N; P = P->next; } cout<<endl; } int main() { system("chcp 1251"); Point Head = NULL; Create(Head); Create(Head); Traverse(Head); Traverse(Head); }  
    • от Georgi Kirchev
      Здравейте , дадоха ми да правя курсова задача по Визуално програмиране , но не мога да я направя , а имам срок до четвъртък - 10.01.2019 
      програмираме със Visual Studio 2010/13 на MFC Standart , Single Document 
      Ще съм изключително благодарен , ако някой успее да ми помогне. 

      Условието е следното: 
      Да се състави еднодокументно приложение с архитектура документ - изглед.
       - Добавете бутон който трябва да активира функцията , както и елемента Hello от менюто 
       - Добавете контекстно-ориентирано меню към програмата , което използва падащо меню Help като скрито

      Във файл да се съхраняват и четат данни, които да се въвеждат чрез диалогова кутия , която се вика чрез 
       - ляв бутон на мишката.
       - опция от менюто .
       - клавишни ускорители.
       - бутон от инструменталната лента.
      В диалоговата кутия да има:
       - текстово поле за въвеждане на текст.
       - рамка със списък за шрифтове.
       - групова рамка.
       - бутон за приключване.

      Предварително благодаря , ако някой се захване да ми окаже помощ. 
       
  • Дарение

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване