С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335

Функция strcmp(), неравенство строк, ветка if - else

03.03.2020, 11:19. Показов 2863. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
int main(коллеги)
Не могу понять почему проверка условия - if перестает нормально работать как только добавляю ветку - else ?
Я понимаю, что Вас задергал уже! Но видимо никак...



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
cout << "\n - Привет!\n";
//int size=12;
char greeting[12][100] =
{
    "привет",        "- рада с тобой пообщаться, давай что нибудь поделаем!",
    "доброе утро",   "- утро действительно доброе, думаю день будет таким же, давай что нибудь поделаем!",
    "добрый день",   "- давай что нибудь поделаем, с пользой проведем этот день...",
    "здравствуй",    "- хмм ... слишком официально! Ладно, давай что нибудь поделаем.",
    "здравствуйте",  "- а мы разьве на - Вы?  Ладно, давай что нибудь поделаем.",
    "день добрый",   "- звучит как-то официально)), давай что нибудь поделаем, и с пользой проведем этот день..."
};
 
char gr[20];
gets(gr);
 
for(int i=0; i<12; i=i+2)       // счетчик бежит по массиву с шагом через один, то есть 0, 2, 4, 6, 8, 10
if    (!strcmp(gr, greeting[i])) // если введенное слово записанное в массив - str, совпадает со словами в массиве - greeting
{
    cout << greeting[i+1] << "\n"; // то выводим ответ (строчку следующую за этим словом)
    break;
}
else //(strcmp(gr,greeting[i]))  // что тока не пробовал!!!! // пока закоментировал
{
    cout << "\n - я что-то не очень поняла, ну и ладно!"
         << "\n - слушай, давай что нибудь поделаем! \n";
    break;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2020, 11:19
Ответы с готовыми решениями:

Массив строк типа - char: не срабатывает функция - strcmp()
int main(нужна помощь) Всем доброго дня, коллеги. Понимаю, что вопрос не из умных, но ответ найти не удалось, я смотрел здесь похожие...

Найти все решения числового ребуса: ВЕТКА+ВЕТКА+СТВОЛ=ДЕРЕВО
написать программу Pascal

Функция strcmp
Если я, правильно понимаю, то функция strcmp сравнивает 2 строки лексикографически. Но почему-то функция strlen возвращает -1 при...

17
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
03.03.2020, 11:26  [ТС]
else if (strcmp(gr,greeting[i])!=0) // так тоже не работает
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
03.03.2020, 12:07
R_U_S_V, это работает так:
C++
1
2
3
4
5
6
7
8
if (true)
{
     // Если true выводим что то....
}
else
{
    // Сюда попадаем если в if не true
}
1
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2020, 12:10
Лучший ответ Сообщение было отмечено R_U_S_V как решение

Решение

R_U_S_V, сделай так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    int i;
    for (i = 0; i < 12; i = i + 2)       // счетчик бежит по массиву с шагом через один, то есть 0, 2, 4, 6, 8, 10
    {
        if (!strcmp(gr, greeting[i])) // если введенное слово записанное в массив - str, совпадает со словами в массиве - greeting
        {
            cout << greeting[i + 1] << "\n"; // то выводим ответ (строчку следующую за этим словом)
            break;
        }
    }
    if (i == 12)
    {
        cout << "\n - я что-то не очень поняла, ну и ладно!"
            << "\n - слушай, давай что нибудь поделаем! \n";
    }
Добавлено через 2 минуты
Ты попадал в ветку else сразу же после неравенства строки при первом же i, в данном случае, при i=0.
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
03.03.2020, 12:13  [ТС]
не работает!
C++
1
2
3
4
5
6
if(i==12)
{
    cout << "\n - я что-то не очень поняла, ну и ладно!"
         << "\n - слушай, давай что нибудь поделаем! \n";
    //break;
}
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2020, 12:14
R_U_S_V, int i; должно быть быть вне цикла... Тщательнее надо быть...
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
03.03.2020, 12:15  [ТС]
Цитата Сообщение от liv Посмотреть сообщение
Ты попадал в ветку else сразу же после неравенства строки при первом же i, в данном случае, при i=0.
При i=0 все работало, а вот следующий элемент не срабатывал...
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2020, 12:16
Цитата Сообщение от R_U_S_V Посмотреть сообщение
При i=0 все работало
Правильно! Подумай, почему
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
03.03.2020, 12:18  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
int i;
for(i=0; i<12; i=i+2)        // счетчик бежит по массиву с шагом через один, то есть 0, 2, 4, 6, 8, 10
if    (!strcmp(gr, greeting[i])) // если введенное слово записанное в массив - str, совпадает со словами в массиве - greeting
{
    cout << greeting[i+1] << "\n"; // то выводим ответ (строчку следующую за этим словом)
    break;
}
if(i==12)
{
    cout << "\n - я что-то не очень поняла, ну и ладно!"
         << "\n - слушай, давай что нибудь поделаем! \n";
}
Да! так сработало!
То есть глобальный int нужен был????
То есть вторая ветка не видела i ?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2020, 12:20
if-else - один оператор.
При вводе строки, не равной первой из ожидаемых работала ветка else: выводилось сообщение и цикл прекращался...

Добавлено через 1 минуту
Цитата Сообщение от R_U_S_V Посмотреть сообщение
То есть глобальный int нужен был????
Ну, не глобальный... А за пределами цикла.
Чтобы осталось значение.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
03.03.2020, 12:23
R_U_S_V, можно через твои любимые указатели решить задачу, для закрепления.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <cstring>
 
int main()
{
    constexpr int size1 = 12;
    char greeting[size][100] =
    {
        "привет",        "- рада с тобой пообщаться, давай что нибудь поделаем!",
        "доброе утро",   "- утро действительно доброе, думаю день будет таким же, давай что нибудь поделаем!",
        "добрый день",   "- давай что нибудь поделаем, с пользой проведем этот день...",
        "здравствуй",    "- хмм ... слишком официально! Ладно, давай что нибудь поделаем.",
        "здравствуйте",  "- а мы разьве на - Вы?  Ладно, давай что нибудь поделаем.",
        "день добрый",   "- звучит как-то официально)), давай что нибудь поделаем, и с пользой проведем этот день..."
    };
 
 
    constexpr int size2 = 20;
    char gr[size2];
    std::cin.getline(gr, size2);
 
    std::cout << "\n - Привет!\n";
 
    char const * p = "\n - я что-то не очень поняла, ну и ладно!" \
                     "\n - слушай, давай что нибудь поделаем! \n";
 
    for(int i = 0; i < size1; i += 2) 
    if    (!strcmp(gr, greeting[i] ) )
    {
        p = greeting[i + 1];
        break;
    }
 
    std::cout << *p;
 
    return 0;
}
1
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2020, 12:25
Когда пишется:
C++
1
for(int i=0;;)
топеременная i живет только внутри цикла. А нам нужно узнать, когда цикл прервался

Добавлено через 1 минуту
_stanislav, или так
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
03.03.2020, 12:38  [ТС]
Цитата Сообщение от liv Посмотреть сообщение
топеременная i живет только внутри цикла. А нам нужно узнать, когда цикл прервался
Дошло!

Добавлено через 41 секунду
Цитата Сообщение от liv Посмотреть сообщение
Ну, не глобальный... А за пределами цикла.
Чтобы осталось значение.
Понял!

Добавлено через 3 минуты
Цитата Сообщение от _stanislav Посмотреть сообщение
можно через твои любимые указатели решить задачу, для закрепления.
Изучу! СПАСИБО!

Добавлено через 8 минут
Цитата Сообщение от liv Посмотреть сообщение
if (i == 12)
это можно "певести" как - если выходим за пределы массива?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2020, 12:40
Цитата Сообщение от R_U_S_V Посмотреть сообщение
это можно "певести" как - если выходим за пределы массива?
совершенно верно
Дощелкали до конца, i стало равно 12 и вышли из цикла по условию i>=12
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
03.03.2020, 12:43  [ТС]
значит не все со мной еще потеряно))) не так уж и тупой коим себя реально считаю! Всю жизнь блин просрал не в той теме теперь вот как догонять надо!
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2020, 12:47
Цитата Сообщение от R_U_S_V Посмотреть сообщение
значит не все со мной еще потеряно
Не то слово! Было бы желание! Какие твои годы? Я вон в Инете видел про одного программиста, которому не то 80, не то 90 лет! Программированию все возрасты покорны!
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
03.03.2020, 12:49  [ТС]
Цитата Сообщение от liv Посмотреть сообщение
Не то слово! Было бы желание! Какие твои годы? Я вон в Инете видел про одного программиста, которому не то 80, не то 90 лет! Программированию все возрасты покорны!
Это прям реально мотивирует не падать духом! Хотя иногда возникают жуткие мысли, что не в тот калашный ряд суюсь!
СПАСИБООООО!
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
03.03.2020, 12:56
Цитата Сообщение от liv Посмотреть сообщение
Программированию все возрасты покорны!
согласен, программирование не футбол, а мудрость и усидчивость дело наживное.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.03.2020, 12:56
Помогаю со студенческими работами здесь

Функция strcmp
В каком файле посмотреть функцию strcmp? В string.h смотрел и там ничего не нашел. В string тоже нет. Точнее в string.h есть, но там...

функция strcmp
void h(anceta*a, int n){ for( int i = 0; i&lt;n; i--) for(int j = 0; j &lt; i; j++) { strcmp(a.fam,a.fam); if( ...

функция strcmp
какое бы не было nazv_otdela всегда пишет равны как лечить? void predpri9tie::zad() { cout&lt;&lt;&quot;vvedite nugniy...

Функция strcmp
Скажите пожалуйста,по какой причине,если указатель b- это символ &quot;P&quot;, функция strcmp может возвращать не 0? ...

Функция strcmp
Имеется три числа num1, num2 и det. Как используя функцию strcmp определить принадлежит ли число det, промежутку num1, num2?


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru