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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
alekola
 Аватар для alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
#1

Цикл до символа - C++

18.07.2012, 06:28. Просмотров 473. Ответов 9
Метки нет (Все метки)

Здравствуйте, разбираюсь в С++
Хочу сделать консольный калькулятор(простой который будет выполнять операции над двумя числами.)
Кусок:
C++
1
2
3
4
5
6
7
std::string input=""; 
std::string tmp="";
getline(std::cin,input); // принимаем ввод до нажатия Enter
    
for(int i=0; input[i] != '-' || input[i] != '+' || input[i] != '/' || input[i] != '*'; i++){ //цикл до знака чтобы отделить первое слагаемое
tmp+=input[i];  // 
    }
Результат Segmentatino fault
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
18.07.2012, 06:50     Цикл до символа #2
можно так

C++
1
2
3
4
5
6
7
for(size_t i=0; i<input.length(); i++)
    { //цикл до знака чтобы отделить первое слагаемое
       if(input[i] == '-' || input[i] == '+' || input[i] == '/' || input[i] == '*')
            continue;
       else
                tmp.push_back(input[i]);  //
    }
alekola
 Аватар для alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
18.07.2012, 07:01  [ТС]     Цикл до символа #3
А в чем у меня ошибка?
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
18.07.2012, 07:12     Цикл до символа #4
alekola, Ну в том, что может не встретится ни одного такого знака и тогда будем пытаться брать данные из некой области памяти, которая находится за пределом нашей строки. Ну и плюс бесконечный цикл.

Достаточно переписать так.

C++
1
for(int i=0; i < input.length() && input[i] != '-' && input[i] != '+' && input[i] != '/' && input[i] != '*'; i++)
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
18.07.2012, 07:14     Цикл до символа #5
у вас в цикле for несколько !=, а может быть не больше одного
!=||==
alekola
 Аватар для alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
18.07.2012, 07:43  [ТС]     Цикл до символа #6
C++
1
2
у вас в цикле for несколько !=, а может быть не больше одного
!=||==
Покажите пожалуйста как синтаксически правильно нужно это составить
zss
Модератор
Эксперт С++
 Аватар для zss
6130 / 5733 / 1855
Регистрация: 18.12.2011
Сообщений: 14,656
Завершенные тесты: 1
18.07.2012, 09:04     Цикл до символа #7
Цитата Сообщение от defer Посмотреть сообщение
у вас в цикле for несколько !=, а может быть не больше одного
!=||==
С чего бы это.
Логический оператор можно написать любой сложности.
А еще можно, например, использовать оператор "запятая":
C++
1
2
3
4
5
6
7
for(int i=0,bool b; 
    b=i < input.length(), 
    b&&=input[i] != '-',
    b&&=input[i] != '+', 
    b&&=input[i] != '/',
    b&&=input[i] != '*';
 i++)
alekola
 Аватар для alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
18.07.2012, 09:27  [ТС]     Цикл до символа #8
Ну в том, что может не встретится ни одного такого знака и тогда будем пытаться брать данные из некой области памяти, которая находится за пределом нашей строки. Ну и плюс бесконечный цикл.
Если я подаю корректную строку ошибка все равно появляется(первый код)
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
18.07.2012, 09:57     Цикл до символа #9
alekola, Там дальше. Читайте.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2012, 10:19     Цикл до символа
Еще ссылки по теме:

C++ Считать из файла от определенного символа(слова) до определенного символа(слова)
C++ Копирование из строки от символа до символа
C++ Вместо 1-го символа, нужно чтобы 2 символа считывалось!
Код символа в число символа C++
C++ Бесконечный цикл при попытке ввода символа вместо числа

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
6130 / 5733 / 1855
Регистрация: 18.12.2011
Сообщений: 14,656
Завершенные тесты: 1
18.07.2012, 10:19     Цикл до символа #10
А с кодировкой у Вас все в порядке?
getline прочитает в кодировке CP866,
а сравниваете Вы в Windows 1251.
Yandex
Объявления
18.07.2012, 10:19     Цикл до символа
Ответ Создать тему
Опции темы

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