Форум: Форум C++Разное
Новые темы: 00
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Освоение циклов в С++
 
 автор: Deck   (10.11.2011 в 14:28)   письмо автору
 
 

В данный момент прохожу циклы в С++. Я написал код с циклом "for" используя материал из книги плюс постарался учесть ошибки исправленные в моей первой теме. Программа скомпилировалась и вот теперь мне интересно что должно было произойти?
#include <stdio.h>
#include <iostream>

using namespace std;

int main (int arg, char* pszArgs[])
{
    int loopCount;
    cout << "12 ";
    cin >> loopCount;
    
    for (int i = loopCount; 1 > 0; i--);
    {
        cout << "осталось выполнить ";
        cout << "i-1 ";
        cout << " циклов\n";
    }
    system ("pause ");
    return 0;
}


Как я понял из книги должен был произойти цикл указанный в коде и значение должно было уменьшиться на 1, но после запуска, в консольной строке я наблюдаю только значение 12. Мой вопрос таков: что должно было произойти и правильно ли написан код?

  Ответить  
 
 автор: cheops   (10.11.2011 в 14:40)   письмо автору
 
   для: Deck   (10.11.2011 в 14:28)
 

>cin >> loopCount;
1. cin предполагает, что вы должны ввести число, т.е. после появления значения 12, вы должны ввести свое число - столько будет циклов.

>cout << "i-1 ";
2. Здесь нужно убрать двойные кавычки, иначе вычисления не будут осуществляться и у вас эта строка будет выводиться как есть.

>for (int i = loopCount; 1 > 0; i--);
3. Вместо 1 > 0, нужно писать i > 0, иначе у вас будет бесконечный цикл, так как 1 > 0 будет всегда оставаться истинной (true), сколько бы циклов не произошло.

  Ответить  
 
 автор: Deck   (10.11.2011 в 15:49)   письмо автору
 
   для: cheops   (10.11.2011 в 14:40)
 

Т.е. вместо cin >> loopCount надо написать например cin >> 3 ?
Когда я убираю двойные кавычки выдает ошибки (fordemo\fd.cpp name lookup of `i' changed for new ISO `for' scoping и fd.cpp using obsolete binding at `i' )

  Ответить  
 
 автор: cheops   (10.11.2011 в 15:52)   письмо автору
 
   для: Deck   (10.11.2011 в 15:49)
 

Сделайте проще, вместо вот этого блока
int loopCount;
cout << "12 ";
cin >> loopCount;
напишите, явно в программе, сколько вы хотите, чтобы циклы выполнялись, присвоив это значение переменной loopCount
int loopCount = 3;

>Когда я убираю двойные кавычки выдает ошибки (fordemo\fd.cpp name lookup of `i' changed for
>new ISO `for' scoping и fd.cpp using obsolete binding at `i' )
Заключите выражение в круглые скобки
cout << (i - 1);

  Ответить  
 
 автор: Deck   (10.11.2011 в 16:06)   письмо автору
92.2 Кб
 
   для: cheops   (10.11.2011 в 15:52)
 

>напишите, явно в программе, сколько вы хотите, чтобы циклы выполнялись,
Если можно делать так зачем тогда нужно значение cout << 12(в моем блоке). Как я понимаю это вывод на экран, а cin это то что нужно ввести(правда я не понимаю где осуществляется этот ввод в самом коде или в командной строке).

>Заключите выражение в круглые скобки
Не помогает, выводит все теже ошибки.

  Ответить  
 
 автор: cheops   (10.11.2011 в 18:38)   письмо автору
 
   для: Deck   (10.11.2011 в 16:06)
 

>>напишите, явно в программе, сколько вы хотите, чтобы циклы выполнялись,
>Если можно делать так зачем тогда нужно значение cout << 12(в моем блоке). Как я понимаю
>это вывод на экран, а cin это то что нужно ввести
Совершенно верно.

>(правда я не понимаю где осуществляется этот ввод в самом коде или в командной строке).
В командной строке, нужно переключить фокус на неё и вводить цифры (по мере ввода они будут отображаться).

>>Заключите выражение в круглые скобки
>Не помогает, выводит все теже ошибки.
Сейчас, попробую воспроизвести ситуацию.

  Ответить  
 
 автор: cheops   (10.11.2011 в 18:51)   письмо автору
 
   для: Deck   (10.11.2011 в 16:06)
 

Вообще странно себя ведет wxDev-C++, он хочет, чтобы i была объявлена вне цикла for (как в чистом C - это одно из характерных отличий C от C++). Вот вариант, который у меня скомпилировался, обратите внимание, что после for точки с запятой не нужно, так как далее идут фигурные скобки.
#include <stdio.h>
#include <iostream>

using namespace std;

int main (int arg, char* pszArgs[])
{
  int loopCount = 3;
  int i;
  for (i = loopCount; i > 0; i--)
  {
    cout << "осталось выполнить ";
    cout << (i-1);
    cout << " циклов\n";
  }
  system ("pause ");
  return 0;
}

  Ответить  
 
 автор: Deck   (11.11.2011 в 15:13)   письмо автору
 
   для: cheops   (10.11.2011 в 18:51)
 

Спасибо, все скомпилировалось, но надпись "осталось 1(2,3) цикла" написана непонятно :)
Такой вопрос: почему после строки cout << "циклов\n " нужна точка с запитой(там же вроде тоже фигурная скобка)?

  Ответить  
 
 автор: cheops   (11.11.2011 в 18:20)   письмо автору
 
   для: Deck   (11.11.2011 в 15:13)
 

1. По поводу русского текста, возможно вас заинтересуют темы по ссылкам
http://softtime.ru/cpp/read.php?id_forum=1&id_theme=10
http://softtime.ru/cpp/read.php?id_forum=1&id_theme=295
если останутся вопросы, лучше завести новую тему.

  Ответить  
 
 автор: cheops   (11.11.2011 в 18:26)   письмо автору
 
   для: Deck   (11.11.2011 в 15:13)
 

>Такой вопрос: почему после строки cout << "циклов\n " нужна точка с запитой(там же вроде тоже
>фигурная скобка)?
Не совсем так, внутри фигурных скобок три оператора cout, в конце каждого из них нужна точка с запятой. Если бы в случае оператора for фигурные скобки не использовались, то ему бы тоже потребовалась точка с запятой
for (i = loopCount; i > 0; i--)  cout << "осталось выполнить " << (i-1)  << " циклов\n";
Так как де-факто это и есть истинная форма оператора for - он выполняет в цикле один оператор. Однако, одного оператора зачастую мало, поэтому используется составной оператор - фигурные скобки
for (i = loopCount; i > 0; i--)
{
  // Тут много других операторов, все они будут выполняться
  // в цикле
}
Вот в конце составного оператора (фигурные скобки) точка с запятой не обязательна (есть парочка исключений, например, класс, но в большинстве случаев скобки обходятся без точки с запятой, так как и так понятно, что это просто контейнер для других операторов). Все остальные операторы требуют в конце точки с запятой, иначе C++ не будет "понимать" где начинаются и заканчиваются операторы.

  Ответить  
 
 автор: Miha_drinking_bout   (12.11.2011 в 06:47)   письмо автору
 
   для: cheops   (11.11.2011 в 18:26)
 

Спасибо за пояснение - тоже полезно было. Всегда интуитивно понимал работу for, но не задумывался над тем - почему... ; не ставится/ставится. Теперь знаю.

  Ответить  
 
 автор: Deck   (12.11.2011 в 10:18)   письмо автору
 
   для: cheops   (11.11.2011 в 18:26)
 

Спасибо, очень помогли. Постараюсь учесть в последующих работах.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования