while (1) в Си

moga80

как понимать такую запись:
while(1)
{
.......
}
?

Dasar

бесконечный цикл.

kruzer25

Мне тут недавно обхяснили, что численное значение TRUE - единица. Остальное можешь додумать сама.

moga80

понятно, то есть если у меня вот такая запись
while(1)
{
...
if (p=NULL)break;
}
то процедура крутится, пока p не равно NULL?
а функция exit(1 что тогда означает?

shlyumper

функция exit(1) говорит о том, что нужно выйти из форума с кодом 1 и наконец почитать хотя бы одну книжку из серии "Язык программирования C для начинающих за 37 минут!"

Dasar

> то процедура крутится, пока p не равно NULL?
там точно только один знак '='?
если все-таки два знака равенства, то да - цикл крутится пока p не равно NULL.
если один, то это ошибка, p - будет в первой же итерации приравен нулю, и цикл будет крутиться вечно.
> функция exit(1
выход из программы с кодом возврата 1.

kruzer25

а функция exit(1 что тогда означает?
Она означает, что тебе надо запустить man 1 exit
А если серъёзно - думаю, что завершение программы с кодом 1

alexkravchuk

while(1)
{
...
if (p=NULL)break;
}
то процедура крутится, пока p не равно NULL?
а функция exit(1 что тогда означает?
Да, верно, хотя здесь красивее было бы написать
do{
....
}
while(p!=NULL);
exit(1) - прервать работу программы с кодом ошибки =1 (0 - без ошибки). Правда обычно на код ошибки никто не смотрит, поэтому можно считать, что просто прервать работу программы.

FRider

exit(1)
означает завершение процесса с кодом выхода 1.
ЗЫ Вообщето надо читать документацию, тогда подобныеотпадут.

kruzer25

Правда обычно на код ошибки никто не смотрит
Если это программа, которую надо сдать преподу по информатике и забыть - да.
А если это модуль крупного проекта - ты очень не прав.

moga80

всем спасибо
действительно, там 2 знака равенства (p==NULL)
и действ-но, это прогр-ма, кот нужно сдать преп-лю и забыть

FRider

тем не менее, читать документацию стоит.

moga80

да я итак читаю

FRider

а можно узнать, что конкретно ты читаешь?

moga80

первое, что под рукку попало- Подбельский и Фомин "прогр-е на яз Си"

FRider

а под какой поерационной системой пишешь?

laki

исходник программы одногруппника

moga80

windows?

FRider

странно, что там не описана семантика цикла while и вычисление логических выражений в СИ.

kruzer25

Угу, нам тоже её рекоендовали - хреновая книжка.
Могу посоветовать очень хорошую книжку Страуструпа - продаётся за ~400 в аргументе, ~500 в букинисте - там, по сути, написано вообще всё о си++

FRider

это я вообще то спросил..

juliuzz

Оч. хорошая книжка для начинающих.

laki

Угу, нам тоже её рекоендовали - хреновая книжка.
нормальная книжка.
Могу посоветовать очень хорошую книжку Страуструпа...
чтобы написать программу в универе и забыть, не обязательно ее читать

kruzer25

Из этой книжки я, в частности, так и не смог понять - как именно перегружать операторы... там даже примеров нормальных нет... задавать пришлось смотреть рограмму знакомого... и в результате, я только совсем недавно нормально узнал хоть что-то об операторах...

shlyumper

чудесная книжка!
Четай, четай, меньше фтыкай ф форум и будет тебе счастье!
И не пишы сюда, некреативно.

FRider

чуве, речь идет о С, насколько я понял...

kruzer25

Да, протупил, сорри...
Но не думаю, что книжка подбельского/фомина по си написаноа сильно лучше, чем их же - по си++...
Кстати, это какой курс, что используется простой си? Первый, что ли

laki

вмк 2ой осенний семестр
UNIX и язык Си

ruler

Дорогой друг, не сбивайте девушку с Пути.
Общение с наставников - важная часть духовного роста. А здесь наставников даже несколько.

kruzer25

Странно... на ММ уже вовсю ООП идёт...

laki

вмк 2ой весенний ООП и Язык С++

juliuzz

забываете о химиках и физиках!

shlyumper

Чорт, точно!
, пожалуйста, пришли мне свою фотографию в приват, я помогу выбрать тебе духовного наставника.

FRider

фиговый из тебя наставник, если сразу недопер

bobby

Очевидно, что нужно читать Чернокнижку

FRider

Обязательно ночью и при полной луне.

yolki

Подбельского-Фомина нужно в чёрный список внести, слишком уж он запутывает студентов.

Olenenok

Очень полезная книжка - только в ней была описана процедура, выполняя которую ваша программа не вываливается, когда в качестве аргумента при вызове задаётся очченннььь длинная строка

ppplva

void f(const char* s) {}  

?

yolki

нет, тут речь идёт о другом.
В своё время, когда я преподавал у программирование, одно из требований, которым должна была удовлетоврять программа было такое: когда программа спрашивает имя файла для дальнейшей работы, malicious пользователь может ввести такое имя, что программа валится.
в П-Ф описан процесс, как обойти подобные ошибки (переполнение буфера ввода).

kruzer25

А разве, если известно, что такое переполнение буфера ввода, непонятно, как это можно обойти

yolki

не все студенты это понимают, а если программа списана - непонимают вдвойне.

Olenenok

Можно, там, насколько сейчас помню, не считанные символы из командной строки (или из буфера scanf) выгребались с помощью getchar:

while (getchar != '\n');

356ft85

зачем такие тонкости нужны?
разве в задании требуется какие-то заумные ошибки обходить?

kruzer25

Это не "заумные ошибки", а огромная дыра. Кстати, подавляющее большинство дыр в ПО как раз происходят из-за переполнения буфера.

356ft85

в ПО то бесспорно, но в проге для препа то пох

ruler

Да-да, причем проценты там какие-то дикие.

kruzer25

А практически всё оставшееся, думаю - разнообразные injections...
Хотя, если подумать - по идее, вообще любая ошибка связана с тем, что мы начинаем исполнять пользовательский ввод...

kokoc88

Сто пудофф, 99.9% программ страдают от переполнения буфера, а оставшиеся 0.1% от injections.

tokuchu

но в проге для препа то пох
Преподы разные бывают.

amkharchenko

Далеко не любая. Многочисленные race conditions тому примером.

ale

думаю это просто один цикл закончится когда будет 1, не путай с true
Оставить комментарий
Имя или ник:
Комментарий: