8 / 8 / 2
Регистрация: 26.09.2007
Сообщений: 596
1

Условие в цикле for

08.05.2021, 12:54. Показов 478. Ответов 5
Метки нет (Все метки)

Читаю сейчас Б.Страустрапа книгу С++ там есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct pair
{
char *name;
int val;
};
 
const int large = 1024;
static pair vec[large+1];
 
pair * find(const char *p)
{
    int i;
    for ( i = 0; vec[i].name; i++ )
        if(strcmp(p,vec[i].name) == 0) return &vec[i];
    if(i == large) return &vec[large-1];
    return &vec[i];
}
Я не пойму тут цикл for почему нет условия а только одно значение vec[i].name? Там же должно быть что- то вроде одно меньше другого или одно больше другого, а тут просто vec[i].name. Что это? Это делать цикл пока vec[i].name не равно нулю?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2021, 12:54
Ответы с готовыми решениями:

Условие в цикле
Здравствуйте. Почему в этом случае цикл выполняется девять раз: for(int year = 0; year < 10;...

Не срабатывает условие в цикле while
Здравствуйте. Возникла следующая проблема: Есть вектора alph и tape, элементы которых вводит...

Необычное условие в цикле
Приветствую всех. Попался код с циклом примерно следующего вида: ... for(i = 0; f != 5, g > 7;...

Условие строки в цикле while
#include "stdafx.h" #include <iostream> #include <string> using namespace std; int main(){...

5
129 / 81 / 49
Регистрация: 10.01.2020
Сообщений: 293
08.05.2021, 13:00 2
kurlyak, там должно быть условие: в случае true - цикл идет, в случае false - цикл прекращается.
В данной ситуации идет проверка на наличие vec[i].name, если указатель vec[i].name = NULL, цикл останавливается.
1
75 / 95 / 13
Регистрация: 26.01.2014
Сообщений: 629
08.05.2021, 13:12 3
Не упомню конкретного кода Страустрапа. Но общие правила говорят, что втрой параметр цикла for(... , par2, ...) условие продолжения-выхода их цикла. Значение параметра должно иметь логическое значение. К тому же целое значение 0 воспринимается как false, а все остальное как true. Возможно в приведенном фрагменте игра на этом. Посмотрите что там vec[i].name. Можете вставить строку отладочной печати перед использованием. Всегда Ваш - Etien.
1
Диссидент
Эксперт C
26826 / 16735 / 3666
Регистрация: 24.12.2010
Сообщений: 37,464
08.05.2021, 15:42 4
kurlyak, цикл кончается, кода указатель name в i-й паре равен 0 или NULL (nullptr)
0
С чаем беда...
Эксперт CЭксперт С++
9988 / 5341 / 1460
Регистрация: 18.10.2014
Сообщений: 12,836
08.05.2021, 17:30 5
Цитата Сообщение от kurlyak Посмотреть сообщение
Я не пойму тут цикл for почему нет условия а только одно значение vec[i].name?
А почему вы решили, что одно vec[i].name уже само по себе не является условием?

Цитата Сообщение от kurlyak Посмотреть сообщение
Там же должно быть что- то вроде одно меньше другого или одно больше другого
Откуда вы это взяли? В языке С++ "условие" - это любое значение, приводимое к типу bool. В вашем примере vec[i].name - это указатель. Указатели в С++ приводимы к типу bool. Значит все в порядке, vec[i].name - это "условие".

Цитата Сообщение от kurlyak Посмотреть сообщение
Это делать цикл пока vec[i].name не равно нулю?
Нет, не совсем.

Это "делать цикл пока результат приведения vec[i].name к типу bool является true". А уж это в свою очередь означает "делать цикл пока vec[i].name является ненулевым указателем".
0
75 / 95 / 13
Регистрация: 26.01.2014
Сообщений: 629
08.05.2021, 17:51 6
Ну совсем разжевать. Сделай переменные ну пусть int a, b, c; a=1; b=1; c= (a==b); и цикл for(...; c; ... ) печать с; В с будет логическое значение проверки (a==b). Оно используется для управления циклом. В примере оно менятся не будет, т.е цикл будет бесконечен. Часто вместо логической переменной пишется логическая операция for(...; (a==b); ... ) , синтаксис это допускает. Если ты считаешь, что какая-то переменная будет использоваться только как логическая, то ее можно и описать как bool c; c принимает два значения true false. Переменные типа bool могут быть смешаны с переменными типа char и int. true=1 false=0. И наоборот переменная типа int имеющая значение 0, в логических выражениях воспринимается как false, не равная нулю (значение может быть любое, не обязательно 1) как true. В главном так. Твой Etien.
P.S. В твоем случае впутываются адреса. Но это уже тонкости, основа та же.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2021, 17:51
Помогаю со студенческими работами здесь

Не выполняется условие в while цикле
Привет, пытаюсь протестировать код из книги, но у меня внезапно перестал правильно работать цикл. ...

Не выполняется условие в цикле for
Доброго времени суток. Почему не выполняется код в цикле for? #include <iostream> using...

Сложное условие в цикле
возможно ли так задать условие в цикле for (int j = 0; (j >3 && j<12); j++) ? весть код:...

Что значит условие s[i] в цикле for
for (int i=0; s; i++) { z=1; for (int j=i+1; s; j++) if (s==s) z=z+1; ...

Правильно задать условие в цикле
char name; int dov; while (dov < 32){ printf("Name: \n"); scanf("%s", &name); ...

Условие выполнения команды в цикле
Здравствуйте! Столкнулся с очень странной ошибкой. Имею двухмерный массив нулей и единиц и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru