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

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

03.03.2020, 11:19. Показов 2878. Ответов 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 / 4574 / 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 / 4574 / 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 / 4574 / 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 / 4574 / 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 / 4574 / 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 / 4574 / 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 / 4574 / 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
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru