Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2012, 22:53   #11
Suby
Пользователь
 
Аватар для Suby
 
Регистрация: 03.11.2012
Сообщений: 89
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Теперь распечатайте и сожгите. Это нужно делать через статическую переменную, как написал Abstraction.
Я до статических переменных еще не дошел. На данном этапе могу решить только таким способом. Вы ведь наверняка все азы С++ тоже не в первый же день освоили?
Про статические переменные следующая глава будет, вот там и разберусь с этим вопросом. Но всё-равно спасибо
Код:
#include <conio.h>
#include <iostream>
using namespace std;

const int SIZE = 20;
void str(char *ch, int n=0);

int main()
{
	int n = 3;
	
	char ch[SIZE] = "Fuck you!";
	str(ch);
	str(ch);
	str(ch);
	str(ch, n);
	str(ch);
	str(ch, n);

	getch();
	return 0;
}
void str(char *ch, int n)
{
	static int time;
	if(n != 0)
	{
		
		for(int i=0; i<time; i++)
			cout << ch << ' ';
		cout << endl << endl;
	}
	else
		cout << ch << endl << endl;
	time++;
}

Последний раз редактировалось Suby; 26.11.2012 в 23:00.
Suby вне форума Ответить с цитированием
Старый 27.11.2012, 10:15   #12
Suby
Пользователь
 
Аватар для Suby
 
Регистрация: 03.11.2012
Сообщений: 89
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Теперь распечатайте и сожгите. Это нужно делать через статическую переменную, как написал Abstraction.
Кстати, сейчас узнал, что моя глобальная переменная int time (объявленная перед main()) тоже является статической. Так что в моем примере вообще без разницы где её обьявлять - глобально или в нужной функции посредством static, ибо итог один и тотже - переменная существует от начала до конца выполнения программы. Так то!
Так что не вкурю - при чем здесь говнокод?
Suby вне форума Ответить с цитированием
Старый 27.11.2012, 11:23   #13
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Так что не вкурю - при чем здесь говнокод?
В видимости. В Вашем случае кто-нибудь другой (а то и Вы сами), нечаянно или нарочно, в посторонней функции может написать, скажем,
Код:
for(time=0; time<n; ++time)
И будете Вы отлавливать этот глюк долго и интересно. Именно поэтому существует механика объявления локальных статических переменных - чтобы гарантировать, что никакой посторонний код к ней не обратится (по имени, во всяком случае).
Кроме того, если в функции объявляется статическая переменная - сразу при взгляде на код функции становится очевидно, что она нерегулярна (то есть, два вызова с одними и теми же аргументами могут производить разный эффект); неочевидная же нерегулярность, порождаемая использованием глобальных переменных, может здорово смутить. Опять же, в том числе и Вас самих, когда детали построения кода забудутся - а они забудутся.
Abstraction вне форума Ответить с цитированием
Старый 27.11.2012, 11:44   #14
Suby
Пользователь
 
Аватар для Suby
 
Регистрация: 03.11.2012
Сообщений: 89
По умолчанию

Спасибо за разьяснения. Теперь я всё вкурил
К сожалению почему-то не могу вам плюсануть
Suby вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прата С++ упр.4 гл.6 sergey_victor Общие вопросы C/C++ 1 14.08.2012 21:32
Стивен Прата. Третья Глава Pirandello_Kruger Общие вопросы C/C++ 0 07.03.2012 22:50
задача по функции С++ lesik_ Помощь студентам 3 23.09.2010 15:40
Вопрос из учебника С. Прата sunplant Общие вопросы C/C++ 3 07.04.2010 11:10
Какую купить версию книги Стивена Прата. Запутался. spamer Свободное общение 0 26.01.2010 03:01