| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
Пропуск break в операторе switch
----------------------------------------------------------------
Как вы помните, оператор break используется в операторе
switch в конце каждой помеченной альтернативы выбора. Пожалуйста,
не забывайте это. Если вы забудете поставить break в данную поме-
ченную альтернативу выбора, то операторы следующих альтернатив
выбора, помеченных за ней, будут также выполняться.
- 561,562 -
Индексы массивов
-----------------------------------------------------------------
Не забудьте, что индекс массива начинается с элемента [0], а
не с элемента [1]. Наиболее распространенная ошибка может быть
проиллюстрирована на примере следующей программы:
main()
{
int list[100],i;
for (i = 1; i <= 100; i++);
list[i] = i + 1;
}
Данная программа оставляет первый элемент list - list[0]
- неинициализированным, и записывает значение в несуществующий
элемент list - list[100] - возможно испортив при этом другие дан-
ные.
Правильная программа будет иметь следующий вид:
main()
{
int list[100],i;
for (i = 0; i < 100; i++)
list[i] = i+1;
}
- 563,564 -
Ошибки при передаче по адресу
-----------------------------------------------------------------
Посмотрите на следующую программу и найдите, что здесь неп-
равильно :
main()
{
int a,b,sum;
printf("Введите два значения:");
scanf("%d %d",a,b);
sum = a + b;
printf("Сумма значений равна: %d\n",sum0;
}
Нашли? Ошибка в операторе
scanf("%d %d",a,b);
Вспомните, что scanf требует от вас передачи адресов, а не
значений!
То же самое относится к любым функциям, содержащим в качест-
ве формальных параметров указатели. Программа, написанная выше,
оттранслируется и выполнится, но при этом scanf возьмет какие-то
случайные значения (мусор), находящиеся в a и b и использует их
как адреса, по которым будут записаны введенные вами значения.
Правильно этот оператор необходимо записать так:
scanf("%d %d", &a, &b);
Здесь функции scanf передаются адреса a и b, и введенные
значения правильно запоминаются в этих переменных по их адресам.
Та же неприятность может случиться с вашей собственноручно
написанной функцией. Помните функцию swap, которую мы определили
в параграфе об указателях?
Что произойдет, если вы вызовете ее следующим образом:
main()
{
- 565,566 -
int i,j;
i = 421;
j = 53;
printf("До обработки: i = %fd j = %fd\n",i,j);
swap(i,j);
printf("После обработки: i = %fd j = %fd\n",i,j);
}
Переменные i и j будут иметь одни и те же значения как до,
так и после их обработки путем обращения к функции swap; однако
значения адресов чисел 421 и 53 будут переставлены, что породит
некоторые хитрые и труднообнаружимые ошибки. Как избежать этого?
Пользуйтесь прототипами функций и полными определениями
функций.
И действительно, вы получили бы ошибку при выполнении main,
если бы swap была описана так, как в этой главе. Если же вы опре-
делите ее таким образом, как представлено далее, то программа
выполнится без ошибок:
void swap(a,b)
int *a,*b;
{
...
}
Вынесение описания переменных a и b из скобок отключает
контроль над ошибками, проводимый в противном случае; это являет-
ся лучшим доводом в пользу того, чтобы не использовать классичес-
кий стиль при определении функции.
- 567,568 -
В добрый путь
----------------------------------------------------------------
Как и говорилось в начале предыдудущей главы, мы не можем
дать вам полное представление о Си только в двух главах. Но мы
предложили вам оптимальный вариант знакомства с этим языком прог-
раммирования. Что вам теперь делать дальше - ответ в предостав-
ленных вам примерах программ: компилируйте их, выполняйте, и (что
более важно) модифицируйте их для того, чтобы понять что же
все-таки произойдет, если вы что-нибудь измените в программе.
Удачи вам, счастливого пути в познании тайн
программирования на Си!
|
adfun.ru
|
|
|
|