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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите отладить программу 
:(
    Опции темы
Bestseller01
Дата 23.12.2015, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



При компиляции выдает ошибку " Run-Time Check Failure #3 - The variable 'Q' is being used without being initialized. "
Код

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <string>

using namespace std;
      struct tsp
        {
           string  Autor,nameOfBook,publishingHouse;
           int year,page;
        struct tsp *next;
        };
        class clsp
        {
            tsp *P;
            int n;
             public:
            int getN(){return n;}
            clsp(int k)    { n=k;}
            void CREATE1(ifstream &in);
            void LOOK();
            void DEL (string str);
            void INS (istream &in,ostream &out);
            void outputInFile(ofstream &out);
            void outputByAuthor(string str);
            void OutputOnTheNumberOfPages(int numberOfPages);
        };
          void clsp::CREATE1(ifstream &in)
          {
               tsp *T,  *Q;
               T=new tsp;
               T->Autor="";
               T->publishingHouse="";
               T->nameOfBook="";
               T->page=0;
               T->year=0;
               P=T;
               for (int i=1; i<=n;i++)
                 {
                    Q=new tsp;
                    in >> Q->Autor;
                    in >>Q->nameOfBook;
                    in >> Q->publishingHouse;
                    in >> Q->year;
                    in >> Q->page;
                    T->next=Q;
                    T=Q;
                 }
              Q->next=NULL;
          };
     void clsp::LOOK()
     {
         tsp *Q;
         cout<<"\nn="<<n<<endl;
         Q=P->next;
            while ( Q)    //  или while (Q!=NULL)
                {
                    cout << "\nName Autor: " << Q->Autor << "\nName of Book: " << Q->nameOfBook
        << "\nPublishing House: " << Q->publishingHouse << "\nYear: " << Q->year
        << "\nkol-vo page: " << Q->page;
             Q=Q->next;
              }
        cout << endl;
     };
 
     void clsp::INS(istream &in,ostream &out)
      {
            tsp *Q, *T;
            Q=P->next;
            n++;
            T=new tsp;
            out << "Input name Autor: ";
            in >> T->Autor;
            out << "Input Name of Book: ";
            in >> T->nameOfBook;
            fflush(stdin);
            out << "Input Izdatelstvo: ";
            in >> T->publishingHouse;
            out << "Input year: ";
            in >> T->year;
            out << "Input kol-vo page: ";
            in >> T->page;
            T->next=Q->next;
            Q->next=T;
            Q=Q->next->next;
        };
 
     void clsp::DEL(string str)
     {
            tsp *T, *Q;
            int numdel=0;
            int n2;
            n2=n;
            Q=P;
            cout << endl;
            while ( Q->next )
                if (Q->next->Autor == str)
                {
                        n--;
                        numdel++;
                        T=Q->next;
                        Q->next=Q->next->next;
                        T->next=NULL;
                  delete T;
                }
                else
                    Q=Q->next;
                    if (numdel==n2) cout <<"\n We deleted all elements" ;
   };
 
void clsp::outputInFile(ofstream &out)
     {   tsp *Q;
          Q=P->next;
       while(Q!=NULL){
            out << Q->Autor << endl << Q->nameOfBook
        << endl << Q->publishingHouse << endl << Q->year
        << endl << Q->page << endl ;
        Q=Q->next;
              }
     };
 
     void clsp::outputByAuthor(string str)
     {
          tsp *Q;
          Q=P->next;
            while ( Q)    //  или while (Q!=NULL)
                {
                    if(Q->Autor == str) {
                    cout << "\nName Autor: " << Q->Autor << "\nName of Book: " << Q->nameOfBook
        << "\nPublishing House: " << Q->publishingHouse << "\nYear: " << Q->year
        << "\nkol-vo page: " << Q->page;
                }
             Q=Q->next;
              }
        cout << endl;
     };
     void clsp::OutputOnTheNumberOfPages(int numberOfPages)
     {
        tsp *Q;
          Q=P->next;
            while ( Q)    //  или while (Q!=NULL)
                {
                    if(Q->page >= numberOfPages) {
                    cout << "\nName Autor: " << Q->Autor << "\nName of Book: " << Q->nameOfBook
        << "\nPublishing House: " << Q->publishingHouse << "\nYear: " << Q->year
        << "\nkol-vo page: " << Q->page;
                }
             Q=Q->next;
              }
        cout << endl;
     }
     int main()
     {
        int n,flag = -1,page;
        string str;
    ifstream inputOfFile("dbase.txt",ifstream::in);
    inputOfFile >> n;
    clsp ob(n);
    ob.CREATE1(inputOfFile);
    while(flag != 0)
    {
        system("cls");
        cout << "1 - Output all information" << endl << "2 - Add a book "
        << endl << "3 - Remove the book" << endl << "4 - Output information on the author" << endl
        << "5 - Output book with the number of pages specified above" << endl << "0 - Exit and save all data"
        <<endl;
        cin >> flag;
        system("cls");
        if(flag == 1 )
        {
            ob.LOOK();
 
        }
        if(flag == 2)
        {
            ob.INS(cin,cout);
        }
        if(flag == 3)
        {
            cout << "\nEnter the author of the book to be removed: ";
            cin >> str;
            ob.DEL(str);
        }
        if(flag == 4)
        {
            cout << "\nEnter the author of the book to be output: ";
            cin >> str;
            ob.outputByAuthor(str);
        }
        if(flag == 5)
        {
             cout << "\nEnter the number of pages: ";
             cin >> page;
             ob.OutputOnTheNumberOfPages(page);
        }
        system("pause");
        system("cls");
 
    }
    ofstream outputOfFile("dbase.txt",ofstream::out);
    outputOfFile << ob.getN() << endl ;
    ob.outputInFile(outputOfFile);
 
     return 0;
     }

PM MAIL   Вверх
rudolfninja
Дата 23.12.2015, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте.
Ну а что непонятно? Вы используете переменную Q непроинициализировав ее.  Проинициализируйте Q везде, где это нужно.
Полагаю, что вы не знаете, что это такое, поэтому гугл вам в помощь.
PM MAIL Skype   Вверх
feodorv
Дата 24.12.2015, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(Bestseller01 @  23.12.2015,  22:46 Найти цитируемый пост)
При компиляции выдает ошибку

Но ведь не просто ошибку, а ещё имя файла исходных текстов и номер строчки. Так на какую именно строчку указывает компилятор? Не сюда ли:
Цитата(Bestseller01 @  23.12.2015,  22:46 Найти цитируемый пост)
void clsp::CREATE1(ifstream &in)
          {
               tsp *T,  *Q;
               T=new tsp;
               T->Autor="";
               T->publishingHouse="";
               T->nameOfBook="";
               T->page=0;
               T->year=0;
               P=T;
               for (int i=1; i<=n;i++)
                 {
                    Q=new tsp;
                    in >> Q->Autor;
                    in >>Q->nameOfBook;
                    in >> Q->publishingHouse;
                    in >> Q->year;
                    in >> Q->page;
                    T->next=Q;
                    T=Q;
                 }
              Q->next=NULL;
          };

Последний оператор болтается вне всякого контекста.

Почему бы не проинициализировать поле next сразу после new?
Цитата(Bestseller01 @  23.12.2015,  22:46 Найти цитируемый пост)
          void clsp::CREATE1(ifstream &in)
          {
               tsp *T,  *Q;
               T=new tsp;
               T->next=NULL;
               T->Autor="";
               T->publishingHouse="";
               T->nameOfBook="";
               T->page=0;
               T->year=0;
               P=T;
               for (int i=1; i<=n;i++)
                 {
                    Q=new tsp;
                    Q->next=NULL;
                    in >> Q->Autor;
                    in >>Q->nameOfBook;
                    in >> Q->publishingHouse;
                    in >> Q->year;
                    in >> Q->page;
                    T->next=Q;
                    T=Q;
                 }
          };




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
fish9370
Дата 6.1.2016, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(feodorv @  24.12.2015,  00:08 Найти цитируемый пост)
Почему бы не проинициализировать поле next сразу после new?


почему бы конструктору его не проинициализировать?


--------------------
undefined
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


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

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


 




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


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

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