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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> почему происходит заполнение массива 
V
    Опции темы
kLASTER
Дата 25.2.2013, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



здравствуйте! Объясните, пожалуйста, почему не срабатывает условие и массив продолжает заполняться
Код

#include <iostream>

double func(int, int);
using namespace std;
int main()
{ 
  int i = 0;
  int x = 0;
  int * p = new int[10]; 
  cout << "Input rezult the game: " << endl;
  cout << "q for exit\n";
  cin >> x;
  for(i = 0; i < 10; i++)
  {
    if(x)
    {
      cin >> x;
      p[i] = x;
      cout << p[i];
    }
    else
      break;
  }
  delete [] p;
  
  system("PAUSE");
  return 0;
}



И как сделать условие останова через буквенную?
Заранее спасибо!!!
PM MAIL   Вверх
bsa
Дата 25.2.2013, 11:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



kLASTER, ты вводишь тип int, при этом, ты не проверяешь поток на ошибки. Чтобы вводить буквы, тебе необходимо изменить тип переменной, в которую ты читаешь данные:
Код
for(i = 0; i < 10; ++i) {
   std::string value;
   if ((cin >> value) && (value != "q")) {
      std::istringstream stream(value);
      int x;
      if (stream >> x) {
          p[i] = x;
          cout << p[i] << ", " << flush;
      } else
          break;
   } else
      break;

PM   Вверх
kLASTER
Дата 25.2.2013, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да, спасибо! Но мне как раз и надо вводить int.
по условию: 
Цитата

Напишите программу, которая запрашивает у пользователя 10 результатов игры 
в гольф, сохраняя их в массиве. При этом необходимо обеспечить возможность 
прекращения ввода до ввода всех 10 результатов. Программа должна отобразить 
все результаты в одной строке и сообщить их среднее значение. Реализуйте 
ввод, отображение и вычисление среднего в трех отдельных функциях,  
работающих с массивами.
 

Получается в первой функции я должен ввести дин. массив, и вводить по одному результату до момента "q"!
Т.к. типы данных разные я пытаюсь false 'НУЛЁМ', он останавливает и последнее значение вводит в остальные ячейки массива!!!

И чета я с первой функцией и застрял. Мне не надо решать всю задачу, я хочу сам! Дайте пинка в правильном напрвлении!!
Заранее СПАСИБО!!!

Это сообщение отредактировал(а) kLASTER - 25.2.2013, 15:10
PM MAIL   Вверх
feodorv
Дата 25.2.2013, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(kLASTER @  25.2.2013,  16:03 Найти цитируемый пост)
Но мне как раз и надо вводить int

А какая разница?  С клавиатуры (стандартного входа) всё равно вводятся символы. И уже потом неявным образом происходит преобразование последовательности символов в int. В коде bsa эта неявность грамотно раскрыта, что никак не противоречит условию задачи.


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


Новичок



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

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



istringstream - ни разу не было в учебнике, теперь узнав об этом конструкторе я понял как идет преобразование!!!
СПАСИБО!

пс: в книге с потоком связано тока cinget();
PM MAIL   Вверх
kLASTER
Дата 25.2.2013, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



может кому пригодится решение неофита:

Код

#include <iostream>

const int SIZE = 10;

//Прототипы функций
int inputData(int p[], int n);
void outputData(int p[],int n);
void middleValue(int p[], int n);

using namespace std;

int main()
{ 
  int * p = new int[10];
  
  int count = inputData(p, SIZE);//функция ввода данных
  outputData(p, count);//функция просмотра данных
  middleValue(p, count);//среднее значение
  
  delete [] p;
  
  system("PAUSE");
  return 0;
}
//////////////////////////////////////
int inputData(int p[], int n)
{
  int count = 0;
  cout << "Input data of the golf; 'q' its exit:\n";
  int ch;
  for(int i = 0; cin >> ch; i++)
  {
     if(ch == 'q')
       break;
     p[i] = ch;
     count++;
     if(i == 9)
       break;
  }
  return count;
}
/////////////////////////////////////////////////
void outputData(int p[], int n)
{
  for(int i = 1;i < n; i++)
  {
    cout << i << " = " << p[i] << endl;
  }
}
/////////////////////////////////////////////////////
void middleValue(int p[], int n)
{
  float sum = 0;
  float total = 0;
  for(int i = 0; i < n; i++)
  {
    sum += p[i];
  }
  if(!sum)
    return;
  cout << "Middle value:" << endl;
  total = n/sum;
  cout << total << endl;
}


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

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

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

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

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


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

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


 




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


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

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