Пятница, 22 Ноября 2024, 13:53

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Задача со строками
Moon_RiderДата: Четверг, 25 Ноября 2010, 14:36 | Сообщение # 1
частый гость
Сейчас нет на сайте
Привет. Вопрос вот в чем:
Задание: "Создать массив структур, содержащий информацию."
Различные цеха завода выпускают продукцию нескольких наименований. Сведения о выпущенной продукции включают наименование, количество и номер цеха. Для заданного цеха вывести количество выпущенных изделий.

Код:

Code

#include <iomanip>
#include <iostream>  
#include <conio.h>  
#include <math.h>  
using namespace std;  

int main()  
{  
  locale::global(locale("rus"));
   struct RECORD{  
      string header;  // Название детали  
      int quantity;  // Коллчичество деталей  
      int shop;   // Номер цеха  
     };  

     cout << "Введите колличество записей о выпущенных деталях: ";  
     int N;  
     cin >> N;  

     RECORD* details;  
     details = new RECORD[N];  

     for(int i = 0; i < N; ++i)  
     {  

      cout << "Введите номер цеха: "; cin >> details[i].shop;  
      cout << "Введите название детали: ";
   cin >> details[i].header;  
      cout << "Введите кол-во деталей выпущенных данным цехом: ";
   cin >> details[i].quantity;  
     }  

     for(int i = 0; i < N; ++i)  
     {  
      cout << details[i].header << '\t' << details[i].shop << '\t' << details[i].quantity << endl;  
     }  

     cout << "Введите номер цеха, для которого высчитывается общее колличество выпущенных изделий: ";  
     int shop;  
     cin >> shop;  

     int count = 0;  
     for(int i = 0; i < N; ++i)  
     {  

      if(details[i].shop == shop)  
       count += details[i].quantity;  
     }  

     cout << "Цех номер " << shop << " выпустил " << count << " дуталей" << endl;  
  getch();  
    return 0;  
     

    }  

Проблема в том что строки так не вводятся: cin >> N; Они должны вводится через getline:

Code
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

Как теперь переделать не могу понять....

shnaketДата: Четверг, 25 Ноября 2010, 16:41 | Сообщение # 2
частый гость
Сейчас нет на сайте
А обязательно использовать string для названия детали? Если нет, то лично у меня и без него все нормально обошлось:
Code
#include <iomanip>
#include <iostream>      
#include <conio.h>      
#include <math.h>      
using namespace std;      

int main()      
{      
      locale::global(locale("rus"));
       struct RECORD{      
          char *header;  // Название детали , но уже через char *     
          int quantity;  // Количество деталей      
          int shop;   // Номер цеха      
         };      

         cout << "Введите количество записей о выпущенных деталях: ";      
         int N;      
         cin >> N;      

         RECORD* details;      
         details = new RECORD[N];      

         for(int i = 0; i < N; ++i)      
         {      

          cout << "Введите номер цеха: "; cin >> details[i].shop;      
          cout << "Введите название детали: ";
       details[i].header= (char *)malloc(128); //выделяем память под название
       cin >> details[i].header; //получаем название       
          cout << "Введите кол-во деталей выпущенных данным цехом: ";
       cin >> details[i].quantity;      
         }      

         for(int i = 0; i < N; ++i)      
         {      
           cout << details[i].header << '\t' << details[i].shop << '\t' << details[i].quantity << endl;      
         }      

         cout << "Введите номер цеха, для которого высчитывается общее колличество выпущенных изделий: ";      
         int shop;      
         cin >> shop;

      int count = 0;      
         for(int i = 0; i < N; ++i)      
         {      

          if(details[i].shop == shop)      
           count += details[i].quantity;      
         }      

      cout << "Цех номер " << shop << " выпустил " << count << " деталей" << endl;     
     _getch();
        return 0;      
             

        }

Единственное, ограничение на длину названия будет стоять. Но при использовании getline оно тоже есть.




Сообщение отредактировал shnaket - Четверг, 25 Ноября 2010, 16:46
MrSmithДата: Четверг, 25 Ноября 2010, 17:20 | Сообщение # 3
EG Development
Сейчас нет на сайте
А где delete details?

Учу С++, рисую пиксельарты, использую D, Lua с LOVE
Skype: mrsmith333
nilremДата: Четверг, 25 Ноября 2010, 19:40 | Сообщение # 4
Просветленный разум
Сейчас нет на сайте
Moon_Rider,

Добавь

Code
#include <string>

И не нужно никакого getline.


Windmill 2

WindMill 2D Game Engine
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг