До этого немного учил Python (там "или если" такого не было)
Сейчас учу C, читаю книгу и в примере написано else if - что это?
...
if (c==...)
state = OUT;
else if (state == OUT){
state = IN;
...
UPD:
...
while ((c = getchar()) != EOF){
++nc;
if (c=='
')
++nl;
if(c==' ' || c== '
' || c=='\t')
state = OUT;
else if(state==OUT){
state = IN;
++nw;
}
}
Ответ
С одной стороны, вы можете смотреть на эту конструкцию, как на набор последовательно проверяемых условий:
if (cond1) // выполняется cond1?
{
code1; // да -> выполняем code1
}
else if (cond2) // нет? проверяем дальше: выполняется cond2?
{
code2; // да -> выполняем code2
}
else if (cond3) // нет? проверяем дальше: выполняется cond3?
{
code3; // да -> выполняем code3
}
else
{
code4; // все проверки не прошли - выполняем code4
}
То есть это есть некий аналог switch
С другой стороны, в этой конструкции используется то, что else относится к ближайшему if, а значит, if после else — просто содержимое else-клаузы (которую можно для ясности отделить фигурными скобками):
if (cond1)
{
code1;
}
else
{
if (cond2)
{
code2;
}
else
{
if (cond3)
{
code3;
}
else
{
code4;
}
}
}
Таким образом, мы остаёмся в пределах привычного if с двумя вариантами.
Хотя так обычно не пишут, чтобы не плодить уровни вложенности.
Обновление:
Давайте разберём актуальный код:
while ((c = getchar()) != EOF) { // считать следующий символ и проверить
// не кончился ли stdin
++nc; // увеличить счётчик символов
if (c=='
') // если строка закончилась,
++nl; // увеличить счётчик строк
if(c==' ' || c== '
' || c=='\t') // если текущий символ -- пробел,
state = OUT; // перейти в состояние "между словами"
else if(state==OUT){ // иначе текущий символ не пробел, и
// если мы были в состоянии "между словами"
state = IN; // то перейти в состояние "в слове"
++nw; // и увеличить счётчик слов
}
}
Судя по всему, это утилита wc?
Комментариев нет:
Отправить комментарий