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

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

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

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

18.07.2012, 06:28. Просмотров 492. Ответов 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
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2012, 06:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Цикл до символа (C++):

Бесконечный цикл при попытке ввода символа вместо числа - C++
При вводе буквы или символы вместо цифры,программа начинает бесконечно выводить последний записанный для выхода текст.Как это можно...

Как скопировать подстроку из строки до определенного символа? Или удалить, начиная с этого символа - C++
Добрый вечер. Ответ искал, но не нашёл. Предположим, есть строка: ABC|DEF Надо скопировать всё до | , т.е., в приведённом...

Вместо 1-го символа, нужно чтобы 2 символа считывалось! - C++
#include <stdio.h> #include <string.h> int main() { char str; char c; char *word; const char delim = "...

2 символа s2 последние и средние 3 символа s1 - соединить - C++
Помогите пожалуйста! Ввести строки s1 и s2. Последние 2 символа s2 и средние 3 символа s1 - соединить. В полученной строке посчитать...

Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом - - C++
Дан текст. Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +,...

Создать строку: с начало три символа первой строки, потом эти же три символа в обратном порядке - C++
Помогите пожалуйста! Ввести строку символов. Создать новую строку следующим образом: с начало три символа первой строки, потом эти же три...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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]);  //
    }
0
alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
18.07.2012, 07:01  [ТС] #3
А в чем у меня ошибка?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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++)
0
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
18.07.2012, 07:14 #5
у вас в цикле for несколько !=, а может быть не больше одного
!=||==
0
alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
18.07.2012, 07:43  [ТС] #6
C++
1
2
у вас в цикле for несколько !=, а может быть не больше одного
!=||==
Покажите пожалуйста как синтаксически правильно нужно это составить
0
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 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++)
0
alekola
21 / 21 / 1
Регистрация: 04.08.2011
Сообщений: 103
18.07.2012, 09:27  [ТС] #8
Ну в том, что может не встретится ни одного такого знака и тогда будем пытаться брать данные из некой области памяти, которая находится за пределом нашей строки. Ну и плюс бесконечный цикл.
Если я подаю корректную строку ошибка все равно появляется(первый код)
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.07.2012, 09:57 #9
alekola, Там дальше. Читайте.
0
zss
Модератор
Эксперт С++
6380 / 5945 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
18.07.2012, 10:19 #10
А с кодировкой у Вас все в порядке?
getline прочитает в кодировке CP866,
а сравниваете Вы в Windows 1251.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2012, 10:19
Привет! Вот еще темы с ответами:

Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке - C++
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить последнее вхождение символа “р” в строке и вывести строку, начиная с...

Код символа в число символа - C++
Подскажите плиз кто знает, каким способом можно присвоить переменной short bit = 0; значение символа под кодом (код в HEX) char symbol =...

Копирование из строки от символа до символа - C++
Как скопировать со строки в другую строку значение от одного какого-либо символа, до другого, и при этом что бы копирование производилось...

Цикл: цикл for вообще никак не воспринимается транслятором - C++
Пишу программу, которая производит различные действия с одномерным массивом. Возникла следующая проблема: цикл for вообще никак не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.07.2012, 10:19
Ответ Создать тему
Опции темы

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