Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
#include <stdio.h>
main()
{
char old[1000];
char new[1000];
int i; /*счетчик цикла длинны массива */
int z; /*счетчик нового массива */
int l; /*длинна массива */
int c; /*член массива */
l = 0;
z = 0;
printf
("программа удаления повторяющихся символов\n");
printf
("введите последовательности символов, из которых нужно удалить повторяющиеся, по окончании вводна нажмите Ctrl+D \n");
while ((c = getchar()) != EOF) {
old[l] = c;
l++;
}
old[l] = 0;
printf
("Введите символ, который нужно удадить как повторяющийся\n");
c = getchar();
for (i = 0; i < l; i++) {
if (old[i] != c) {
new[z] = old[i];
z++;
} else if (old[i] == c && old[i + 1] != c) { /*один символ из повторяющихся */
new[z] = old[i];
z++;
}
}
new[z] = 0;
printf("%s\n", new);
printf("*end");
}
Парень, если ты не будешь инициализировать переменные при объявлении, не дай бг тебе со мной встретиться. То есть int i; писать нельзя. Даже если начального значения нет пиши int i = 0;.
new -- это ключевое слово в ++, не используй в названиях.
Я тебе говорю, что похуй где оно присваивается потом, переменные должны быть инициализированы при объявлении. Культура кода + защита от граблей.
Как видишь, оно всё равно подсветилось. И код на C должен компилироваться в C++.
До культуры кода мне пока далеко 🙂
Но если даш ссылку на ресурс где эта "культура кода" описывается - я буду благодарен конечно.
Конкретно в привиденных (по ссылке что я дал) примерах нет "инициализации при объявлении", может позже будет - я пока что простые примеры разбираю.
Ничему разумеется, пока "кто-то" не присвоет этой переменной значение.
Это было бы страшно, еслии бы I было бы счетчиком и увеличивалось посредстом i++ - если где-то раньше не написать i=0; то увеличения счетчика не произойдет.
Тут же - имеет место быть цикл for.
Это что касается присвоения.
А что касается инициализации - мне пока не ясно, если честно 🙂 - я ж тока начал СИ изучать 🙂
ЗЫ: за ссылку спасибо - потом гляну на досуге.
Присвоение и есть инициализация.
>> если где-то раньше не написать i=0; то увеличения счетчика не произойдет
Произойдет ошибка (если компилятор не отругает). Переменная всегда равна чему-то, а если не присвоишь не сможешь даже догадаться, чему.
>переменные должны быть инициализированы при объявлении
Лучше определять их ближе к месту использования.
И тут же инициализировать.
А лишнее присваивание - не лучший вариант.
Скажем в Си я напишу:
int i;
for( i=0;i<N;++i)
, но никогда
int i=0;
for( i=0;i<N;++i)
>И код на C должен компилироваться в C++.
В общем случае - не должен.
При объявлении в стеке ничего не присваивается? То есть я могу сделать int[100500] и почитать что тут раньше было?
Или в плюсах только такое появилось? Насколько я знаю, присваивание при объявлении всего лишь указывает, чем заполнять (на подобие аргумента конструктора). Не?
> Лучше определять их ближе к месту использования.
Спорный вопрос. Имхо лучше пусть код читабельный будет (типа иногда в порядки проще смотрится, когда переменные в начале, например, функции объявлены (ну в той же области видимости понятно)).
> но никогда
> int i=0;
> for( i=0
Я ебанутый чтоли?)) Конечно не надо так делать, бред же. Я про то, что я бы написал
for (int i=0;i<N;++i)
либо
int i = 0;
for(;i<N;++i)
но болтаться int i; непонятно с чем я бы не стал.
> В общем случае - не должен.
Подумал и согласился.
> То есть я могу сделать int[100500] и почитать что тут раньше было?
Конечно
> for (int i=0;i<N;++i)
В классических сях так нельзя
>int i = 0;
>for(;i<N;++i)
Теряется связь с инициализатром цикла
на самом деле тут не нужно два буфера
если учишься СИ, попробуй оптимальней переписать эту программу:
вместо второго буффера заведи переменную сдвига (int shift = 0;)
сивмол копируется на итое минус сдвиг место, при встрече символа повтора сдвиг инкрементируется
это прекрасно, но процесс обучения должен проходить постепенно:
- сначала решается задача "влоб" (без какой либо оптимизации или мысли о том как оно там будет выполнятся)
- потом уже объясняется как оно выполняется, что такое память, и способы оптимизации -- задача решается чуть более оптимальным путём...
еси с самого первого урока учить всем тонкостям - у человечка забьётся стек мыслями: почему так? что это такое? как оно так?..
и сработает механизм защиты от переполнения: который будет блокировать всю поступающую информацию...
и у человека сложится впечатление: "этот язык - это просто писдец какой-то... нуивонах, лучше буду ПХП учить..."
когда i == ARRAY_SIZE - 1 и old[i] == c, будет обращение за пределы массива
for (i = 0; i < l; i++) {
if (old[i] != c) {
new[z] = old[i];
z++;
}
/* в в ветке else if уже old[i] == c */
else if (/* old[i] == c */ i < ARRAY_SIZE - 1 && old[i + 1] != c) {
new[z] = old[i];
z++;
}
}
Этот язык заводится из простого текстового редактора и для его исполнения нужен только веб-браузер, к вашему сведению сидя на Windows я писал в блокноте копию рабочего стола (писал например в функцию кнопки пуск т.е. ее смена на более светлую картинку и обратно, так же меню картиночное высвечивалось и прочее) Язык вполне удобный, но его не совершенство это мину
на чистом хтмл (путь даже +цсс) максимум что ты напишешь - набор страничек с картинками, текстом и выпадающими списки ссылкок...
при этом Каждая такая страничка и все её элементы -- Статичны: доступны Только для чтения (чтобы изменить что-либо, необходимо править "исходники" -- т.е. языком программирования ХТМЛ невозможно назвать)
или ВБСкрипт, ЖСкрипт, ЖаваСкрипт и сторонние объекты/аплеты к Возможностям хтмл?..
Скорее похоже на месть мелкого тупого пакостника,
не готового к конструктивной беседе и защите своего мнения,
которому хватает сил только мышкой покликать.
Вы что тут совсем ебанулись нах!
Такую поебень писать..
Ну ка нах съебались учиться студентики..
Кто тут напишет тот пидорас!
Кто поставит мне минус, тот яйцетряс!
new -- это ключевое слово в ++, не используй в названиях.
И задание какое-то странное...
http://netlib.narod.ru/library/book0003/ch01_09.htm
про i = ему значение 0 присваивается в цикле for
Это не С++ а просто "СИ".
Как видишь, оно всё равно подсветилось. И код на C должен компилироваться в C++.
Но если даш ссылку на ресурс где эта "культура кода" описывается - я буду благодарен конечно.
Конкретно в привиденных (по ссылке что я дал) примерах нет "инициализации при объявлении", может позже будет - я пока что простые примеры разбираю.
Это было бы страшно, еслии бы I было бы счетчиком и увеличивалось посредстом i++ - если где-то раньше не написать i=0; то увеличения счетчика не произойдет.
Тут же - имеет место быть цикл for.
Это что касается присвоения.
А что касается инициализации - мне пока не ясно, если честно 🙂 - я ж тока начал СИ изучать 🙂
ЗЫ: за ссылку спасибо - потом гляну на досуге.
>> если где-то раньше не написать i=0; то увеличения счетчика не произойдет
Произойдет ошибка (если компилятор не отругает). Переменная всегда равна чему-то, а если не присвоишь не сможешь даже догадаться, чему.
А вообще, не сюда наверно тебе пока.
Мне очень понравилось в свое время.
Лучше определять их ближе к месту использования.
И тут же инициализировать.
А лишнее присваивание - не лучший вариант.
Скажем в Си я напишу:
, но никогда
>И код на C должен компилироваться в C++.
В общем случае - не должен.
Или в плюсах только такое появилось? Насколько я знаю, присваивание при объявлении всего лишь указывает, чем заполнять (на подобие аргумента конструктора). Не?
> Лучше определять их ближе к месту использования.
Спорный вопрос. Имхо лучше пусть код читабельный будет (типа иногда в порядки проще смотрится, когда переменные в начале, например, функции объявлены (ну в той же области видимости понятно)).
> но никогда
> int i=0;
> for( i=0
Я ебанутый чтоли?)) Конечно не надо так делать, бред же. Я про то, что я бы написал
for (int i=0;i<N;++i)
либо
int i = 0;
for(;i<N;++i)
но болтаться int i; непонятно с чем я бы не стал.
> В общем случае - не должен.
Подумал и согласился.
Конечно
> for (int i=0;i<N;++i)
В классических сях так нельзя
>int i = 0;
>for(;i<N;++i)
Теряется связь с инициализатром цикла
А вот это
>> Теряется связь с инициализатром цикла
я не понял. Логически чтоли или так тоже нельзя?
Логически. Писать можно как угодно, хоть for(;;)
но тогда зачем использовать цикл for
если он используется как цикл while:
если учишься СИ, попробуй оптимальней переписать эту программу:
вместо второго буффера заведи переменную сдвига (int shift = 0;)
сивмол копируется на итое минус сдвиг место, при встрече символа повтора сдвиг инкрементируется
- сначала решается задача "влоб" (без какой либо оптимизации или мысли о том как оно там будет выполнятся)
- потом уже объясняется как оно выполняется, что такое память, и способы оптимизации -- задача решается чуть более оптимальным путём...
еси с самого первого урока учить всем тонкостям - у человечка забьётся стек мыслями: почему так? что это такое? как оно так?..
и сработает механизм защиты от переполнения: который будет блокировать всю поступающую информацию...
и у человека сложится впечатление: "этот язык - это просто писдец какой-то... нуивонах, лучше буду ПХП учить..."
есть ошибка связанная с переполнением:
когда i == ARRAY_SIZE - 1 и old[i] == c, будет обращение за пределы массива
Пашолты!!11
С чего так подумал?
Женя Кубышин на пикрелейтед обдумывает "Концепцию интерфейса редактирования профайла для сайта brainity.ru" (с) http://kubyshin.ru/
выдержка из его комента:
Вы говорите что HTML невозможно программировать. По-моему вы просто жутко наелись конфет...
Этот язык заводится из простого текстового редактора и для его исполнения нужен только веб-браузер, к вашему сведению сидя на Windows я писал в блокноте копию рабочего стола (писал например в функцию кнопки пуск т.е. ее смена на более светлую картинку и обратно, так же меню картиночное высвечивалось и прочее) Язык вполне удобный, но его не совершенство это мину
на чистом хтмл (путь даже +цсс) максимум что ты напишешь - набор страничек с картинками, текстом и выпадающими списки ссылкок...
при этом Каждая такая страничка и все её элементы -- Статичны: доступны Только для чтения (чтобы изменить что-либо, необходимо править "исходники" -- т.е. языком программирования ХТМЛ невозможно назвать)
или ВБСкрипт, ЖСкрипт, ЖаваСкрипт и сторонние объекты/аплеты к Возможностям хтмл?..
http://ru.wikipedia.org/wiki/SEX
http://ru.wikipedia.org/wiki/Зоофилия
не готового к конструктивной беседе и защите своего мнения,
которому хватает сил только мышкой покликать.
Такую поебень писать..
Ну ка нах съебались учиться студентики..
Кто тут напишет тот пидорас!
Кто поставит мне минус, тот яйцетряс!