Форум программистов, компьютерный форум CyberForum.ru

Функция не возвращает false - C++

Восстановить пароль Регистрация
 
DEMON_RUS
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 124
27.10.2013, 15:39     Функция не возвращает false #1
Вообщем str это строка, которая может содержать в себе знак математической операции, скобки, число (например 1, 5, 556, 33 ..) и т.д.
Мне нужно сделать, чтоб если str = простому числу (например 4, 66, 356 ...), то возвращается flag_Infix = chislo_i; return true;
А вот если не число (т.е. даже если первый элемент цифра, но последующий буква - 55565gfg, qe3432, 3eq2 ), то
нужно вернуть ложь и выйти из функции.

Я делал так: загоняю в цикл str (он то как раз наверно у меня и не работает) и проверяем:
Если первый символ число - инкрементируем счетчик, проверяем второй символ.
Если он не число - то возвращаем ложь. Надо чтобы функция вернула false при таком раскладе.
Правильно ли работает цикл? И правильно ли вообще работают условия?
Просто у меня функция возвращает истину, даже если str = 5g, или 3434qwew, или qw34.


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
bool Proverka_Infix(string str, MyType_Infix &flag_Infix)  
{  
switch(str[0])  
{  
case '+': flag_Infix = plus_i; return true; break;  
case '-': flag_Infix = minus_i; return true; break;  
case '*': flag_Infix = umnojit_i; return true; break;  
case '/': flag_Infix = delit_i; return true; break;  
case '^': flag_Infix = stepen_i; return true; break;  
case '~': flag_Infix = un_minus_i; return true; break;  
case '(': flag_Infix = open_i; return true; break;  
case ')': flag_Infix = close_i; return true; break;  
}  
for(int i = 0; i < str.length(); i++)  
   {  
       if (str[i] < '0' || str[i] > '9')  
      {  
           i++;  
           return false;  
      }  
   }  
flag_Infix = chislo_i;  
return true;  
}
Такой цикл тоже не работает, и если str = например qw32 то выскакивает системная ошибка, и функция не возвращает false.

C++
1
2
3
4
5
6
7
8
9
10
for(int i = 0; i < str.length(); i++) 
    { 
        if (isdigit(str[i])) 
        { 
            flag_Infix = chislo_i;  
            i++;  
            return true; 
        } 
    }  
    return false;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2013, 15:39     Функция не возвращает false
Посмотрите здесь:

Функция не возвращает результат=( C++
Разработать функцию, которая возвращает True, если полученные значения могут быть сторонами треугольника, False – в противном случае C++
C++ Функция возвращает объект
C++ Написать логическую функцию, которая возвращает true, если сумма чисел - положительное число, и false в обратном случае.
C++ Если число является простым, то функция возвращает true, если не является false
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GoldenChild
28 / 28 / 4
Регистрация: 12.06.2013
Сообщений: 65
27.10.2013, 15:50     Функция не возвращает false #2
В первом цикле ошибка у вас должно быть между 0 и 9 а это >0 && <9 а не так как у вас

Добавлено через 2 минуты
Функцию проверки можно организовать так:
C++
1
2
3
4
5
6
bool check(string s) {
    for (int i = 0; i < s.length(); i++) {
        if (!isdigit(s[i])) return false;
    }
    return true;
}
Shtirliz72
200 / 160 / 38
Регистрация: 25.10.2013
Сообщений: 527
27.10.2013, 16:03     Функция не возвращает false #3
C++
1
return true; break;
А break то зачем? По команде return сразу происходит выход из функции.

Добавлено через 4 минуты
Цитата Сообщение от GoldenChild Посмотреть сообщение
Функцию проверки можно организовать так:
А зачем лишнюю функцию городить? Просто заменить его цикл на ваш - и всё проблемы.
GoldenChild
28 / 28 / 4
Регистрация: 12.06.2013
Сообщений: 65
27.10.2013, 16:05     Функция не возвращает false #4
Цитата Сообщение от Shtirliz72 Посмотреть сообщение
А зачем лишнюю функцию городить? Просто заменить его цикл на ваш - и всё проблемы.
Это не суть вопроса, я просто навел пример, всунуть его куда надо - это не проблема. "Зачем городить функцию" - за тем, что это логичнее и структурировано.
Shtirliz72
200 / 160 / 38
Регистрация: 25.10.2013
Сообщений: 527
27.10.2013, 16:22     Функция не возвращает false #5
Цитата Сообщение от GoldenChild Посмотреть сообщение
"Зачем городить функцию" - за тем, что это логичнее и структурировано.
Ну не знаю. Мне почему-то запомнилось одно высказывания из одной из книг по программированию "функция ради функции - это моветон."
Зачем здесь отдельно в таком месте выводить функцию, которая будет использоваться лишь раз, - ума не приложу. Впрочем, это личное. Можешь не обращать внимание.
DEMON_RUS
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 124
27.10.2013, 16:29  [ТС]     Функция не возвращает false #6
Выходит, как и ранее, такая ошибка(( Может не тут собака зарыта?
Использовал этот фрагмент:
C++
1
2
3
4
5
6
7
for (int i = 0; i < str.length(); i++) 
   {
        if (!isdigit(str[i])) 
        return false;
    }
    flag_Infix = chislo_i;
    return true;
Миниатюры
Функция не возвращает false  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 16:37     Функция не возвращает false
Еще ссылки по теме:

Собственная функция true, false C++
Функция не возвращает значение C++
Написать функцию, находящую в строке двузначное число (возвращает true или false) C++

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

Или воспользуйтесь поиском по форуму:
DEMON_RUS
0 / 0 / 0
Регистрация: 13.05.2013
Сообщений: 124
27.10.2013, 16:37  [ТС]     Функция не возвращает false #7
Вот моя программа, может кто глянет. Она работает с инфиксной, постфиксной и обратной польской записями.
Новичок, с помощью отладчика не смог отследить где ошибка(( Вдобавок изучал в школе немецкий(( Тяжело разбираться..
Вложения
Тип файла: rar ConsoleApplication1.rar (2.00 Мб, 1 просмотров)
Yandex
Объявления
27.10.2013, 16:37     Функция не возвращает false
Ответ Создать тему
Опции темы

Текущее время: 02:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru