8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
1

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

03.03.2020, 11:19. Показов 2093. Ответов 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;
}
Функция strcmp(), неравенство строк, ветка if - else
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2020, 11:19
Ответы с готовыми решениями:

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

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

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

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

17
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
03.03.2020, 11:26  [ТС] 2
else if (strcmp(gr,greeting[i])!=0) // так тоже не работает
0
"C with Classes"
1634 / 1392 / 521
Регистрация: 16.08.2014
Сообщений: 5,828
Записей в блоге: 1
03.03.2020, 12:07 3
R_U_S_V, это работает так:
C++
1
2
3
4
5
6
7
8
if (true)
{
     // Если true выводим что то....
}
else
{
    // Сюда попадаем если в if не true
}
1
Эксперт CЭксперт С++
5109 / 4548 / 854
Регистрация: 07.10.2015
Сообщений: 9,461
03.03.2020, 12:10 4
Лучший ответ Сообщение было отмечено 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
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
03.03.2020, 12:13  [ТС] 5
не работает!
C++
1
2
3
4
5
6
if(i==12)
{
    cout << "\n - я что-то не очень поняла, ну и ладно!"
         << "\n - слушай, давай что нибудь поделаем! \n";
    //break;
}
Функция strcmp(), неравенство строк, ветка if - else
0
Эксперт CЭксперт С++
5109 / 4548 / 854
Регистрация: 07.10.2015
Сообщений: 9,461
03.03.2020, 12:14 6
R_U_S_V, int i; должно быть быть вне цикла... Тщательнее надо быть...
1
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
03.03.2020, 12:15  [ТС] 7
Цитата Сообщение от liv Посмотреть сообщение
Ты попадал в ветку else сразу же после неравенства строки при первом же i, в данном случае, при i=0.
При i=0 все работало, а вот следующий элемент не срабатывал...
Функция strcmp(), неравенство строк, ветка if - else
0
Эксперт CЭксперт С++
5109 / 4548 / 854
Регистрация: 07.10.2015
Сообщений: 9,461
03.03.2020, 12:16 8
Цитата Сообщение от R_U_S_V Посмотреть сообщение
При i=0 все работало
Правильно! Подумай, почему
1
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
03.03.2020, 12:18  [ТС] 9
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Эксперт С++
5109 / 4548 / 854
Регистрация: 07.10.2015
Сообщений: 9,461
03.03.2020, 12:20 10
if-else - один оператор.
При вводе строки, не равной первой из ожидаемых работала ветка else: выводилось сообщение и цикл прекращался...

Добавлено через 1 минуту
Цитата Сообщение от R_U_S_V Посмотреть сообщение
То есть глобальный int нужен был????
Ну, не глобальный... А за пределами цикла.
Чтобы осталось значение.
1
"C with Classes"
1634 / 1392 / 521
Регистрация: 16.08.2014
Сообщений: 5,828
Записей в блоге: 1
03.03.2020, 12:23 11
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Эксперт С++
5109 / 4548 / 854
Регистрация: 07.10.2015
Сообщений: 9,461
03.03.2020, 12:25 12
Когда пишется:
C++
1
for(int i=0;;)
топеременная i живет только внутри цикла. А нам нужно узнать, когда цикл прервался

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

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

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

Добавлено через 8 минут
Цитата Сообщение от liv Посмотреть сообщение
if (i == 12)
это можно "певести" как - если выходим за пределы массива?
0
Эксперт CЭксперт С++
5109 / 4548 / 854
Регистрация: 07.10.2015
Сообщений: 9,461
03.03.2020, 12:40 14
Цитата Сообщение от R_U_S_V Посмотреть сообщение
это можно "певести" как - если выходим за пределы массива?
совершенно верно
Дощелкали до конца, i стало равно 12 и вышли из цикла по условию i>=12
1
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
03.03.2020, 12:43  [ТС] 15
значит не все со мной еще потеряно))) не так уж и тупой коим себя реально считаю! Всю жизнь блин просрал не в той теме теперь вот как догонять надо!
0
Эксперт CЭксперт С++
5109 / 4548 / 854
Регистрация: 07.10.2015
Сообщений: 9,461
03.03.2020, 12:47 16
Цитата Сообщение от R_U_S_V Посмотреть сообщение
значит не все со мной еще потеряно
Не то слово! Было бы желание! Какие твои годы? Я вон в Инете видел про одного программиста, которому не то 80, не то 90 лет! Программированию все возрасты покорны!
1
8 / 7 / 1
Регистрация: 25.12.2019
Сообщений: 321
03.03.2020, 12:49  [ТС] 17
Цитата Сообщение от liv Посмотреть сообщение
Не то слово! Было бы желание! Какие твои годы? Я вон в Инете видел про одного программиста, которому не то 80, не то 90 лет! Программированию все возрасты покорны!
Это прям реально мотивирует не падать духом! Хотя иногда возникают жуткие мысли, что не в тот калашный ряд суюсь!
СПАСИБООООО!
0
"C with Classes"
1634 / 1392 / 521
Регистрация: 16.08.2014
Сообщений: 5,828
Записей в блоге: 1
03.03.2020, 12:56 18
Цитата Сообщение от liv Посмотреть сообщение
Программированию все возрасты покорны!
согласен, программирование не футбол, а мудрость и усидчивость дело наживное.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2020, 12:56
Помогаю со студенческими работами здесь

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

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

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

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


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

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

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