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

Ошибка в программе - C++

Восстановить пароль Регистрация
 
 
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 21:53     Ошибка в программе #1
Доброго времени суток. Только недавно начал пробовать что то ваять на С, пока все получалось до этого момента.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main()
{
   setlocale(0, "");
   int a,b,c,d;
   d=1;
   char rez;
   rez = "e";
   while(rez == "e")
   {
   cout << "Введите первое число: ";
   cin >> a;
   cout << "Введите второе число: ";
   cin >> b;
   c = a + b;
   cout << "Cумма чисел = " << c << endl << "Программа выполнена успешно! Введите 'exit' для выхода или 'e' для вычисления еще одной суммы: " << endl;
   cin >> rez;
   }
}
Что то не нравиться ему переменная rez и никак не могу с ней разобраться.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 21:53     Ошибка в программе
Посмотрите здесь:

ошибка в программе C++
Ошибка в программе C++
C++ ошибка в программе
C++ Ошибка в программе
Ошибка в программе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
15.09.2013, 21:57     Ошибка в программе #2
C++
1
rez = 'e';
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 22:06  [ТС]     Ошибка в программе #3
Цитата Сообщение от ViktorKozlov Посмотреть сообщение
rez = 'e';
Мдаа. Вот уж чего не мог ожидать.

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
   setlocale(0, "");
   int a,b,c,d;
   d=1;
   char rez;
   rez = 'e';
   while(rez == 'e')
   {
   cout << "Введите первое число: ";
   cin >> a;
   cout << "Введите второе число: ";
   cin >> b;
   c = a + b;
   cout << "Cумма чисел = " << c << endl << "Программа выполнена успешно! Введите 'exit' для выхода или 'e' для вычисления еще одной суммы: " << endl;
   cin >> rez;
   }
}
а почему происходит зацикливание программы когда цикл должен завершиться, то есть при вводе "exit"?
Бендерродригез
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
15.09.2013, 22:09     Ошибка в программе #4
Цитата Сообщение от SanychBY Посмотреть сообщение
а почему происходит зацикливание программы когда цикл должен завершиться, то есть при вводе "exit"?
Ты вводишь слово "exit"? А попробуй просто что-нибудь другое и посмотри на результат.
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 22:11  [ТС]     Ошибка в программе #5
Цитата Сообщение от Бендерродригез Посмотреть сообщение
Ты вводишь слово "exit"? А попробуй просто что-нибудь другое и посмотри на результат.
Цикл завершился.

Добавлено через 34 секунды
а почему не работает с exit?
Бендерродригез
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
15.09.2013, 22:14     Ошибка в программе #6
Цитата Сообщение от SanychBY Посмотреть сообщение
Цикл завершился.

Добавлено через 34 секунды
а почему не работает с exit?
Потому что ты считываешь символ, а не строку. Ну, а раз первый символ в "exit" - 'e', то...
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 22:18     Ошибка в программе #7
Цитата Сообщение от SanychBY Посмотреть сообщение
а почему происходит зацикливание программы когда цикл должен завершиться, то есть при вводе "exit"?
когда вводишь слово "exit", то первая буква попадает в переменную rez а остальные так и остаются во входной очереди. Кстати условие продолжения цикла будет true Они никуда не исчезают и ждут следующего оператора cin >> . И когда встречается cin >> a; (переменная a это тип int), то в нее попадает следующая буква или даже оставшаяся часть от слова exit Но ведь в переменной типа int не может хранится строка! поток cin становится испорченным и Вот тут начинается зацикливание.
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
15.09.2013, 22:19     Ошибка в программе #8
Цитата Сообщение от SanychBY Посмотреть сообщение
Мдаа. Вот уж чего не мог ожидать.
одинарные кавычки символ
двойные строка, даже если строка из одной буквы
например
'a' в памяти будет лежать 'a'
"a" в памяти будет лежать 'a' и 0
0 в Си это конец строки
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 22:30  [ТС]     Ошибка в программе #9
Цитата Сообщение от Бендерродригез Посмотреть сообщение
Потому что ты считываешь символ, а не строку. Ну, а раз первый символ в "exit" - 'e', то...
Цитата Сообщение от _ Посмотреть сообщение
когда вводишь слово "exit", то первая буква попадает в переменную rez а остальные так и остаются во входной очереди. Кстати условие продолжения цикла будет true Они никуда не исчезают и ждут следующего оператора cin >> . И когда встречается cin >> a; (переменная a это тип int), то в нее попадает следующая буква или даже оставшаяся часть от слова exit Но ведь в переменной типа int не может хранится строка! поток cin становится испорченным и Вот тут начинается зацикливание.
Хорошо, а как тогда записать в rez всю строку exit?

Добавлено через 1 минуту
Или ка считать?
Бендерродригез
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
15.09.2013, 22:31     Ошибка в программе #10
Цитата Сообщение от SanychBY Посмотреть сообщение
Хорошо, а как тогда записать в rez всю строку exit?

Добавлено через 1 минуту
Или ка считать?
В rez - никак. Это char.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 22:32     Ошибка в программе #11
Цитата Сообщение от SanychBY Посмотреть сообщение
как тогда записать в rez всю строку exit?
для этого нужен массив char-ов. где каждый элемент - символ:

C++
1
2
3
char rez[20];
 
cin >> rez;
еще можно использовать string, но думаю он здесь не нужен
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 22:34  [ТС]     Ошибка в программе #12
Цитата Сообщение от Бендерродригез Посмотреть сообщение
В rez - никак. Это char.
А во что тогда?

Добавлено через 1 минуту
Цитата Сообщение от _ Посмотреть сообщение
еще можно использовать string, но думаю он здесь не нужен
Код
int — целочисленный тип данных.
float — тип данных с плавающей запятой.
double — тип данных с плавающей запятой двойной точности.
char — символьный тип данных.
bool — логический тип данных.
что за стринг?
Бендерродригез
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 3
Регистрация: 18.05.2013
Сообщений: 220
Завершенные тесты: 1
15.09.2013, 22:37     Ошибка в программе #13
Да и зачем? Отправляешь любой символ кроме 'е' и всё.

Добавлено через 2 минуты
Цитата Сообщение от SanychBY Посмотреть сообщение
что за стринг?
Читай учебник дальше, всему своё время.
К тому же, от char до string читать не долго.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 22:37     Ошибка в программе #14
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
   setlocale(0, "");
   int a,b,c,d;
   d=1;
   string rez;
   
   do
   {
       cout << "Введите первое число: ";
       (cin >> a).get();
       cout << "Введите второе число: ";
       (cin >> b).get();
       c = a + b;
       cout << "Cумма чисел = " << c << endl << "Программа выполнена успешно! Введите 'exit' для выхода или 'e' для вычисления еще одной суммы: " << endl;
   
       getline(cin, rez);
   
   } while (rez != "exit");
 
   return 0;
}
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 22:39     Ошибка в программе #15
Цитата Сообщение от SanychBY Посмотреть сообщение
что за стринг?
если коротко сказать то это массив у которого может изменятся размер.
чтобы его использовать надо подключить заголовочный файл
C++
1
#include <string>
а работа с ним намного легче чем с простыми массивами char []
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 22:42  [ТС]     Ошибка в программе #16
Ладно. А то я так не отстану с вопросами спасибо всем
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 22:42     Ошибка в программе #17
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
#include <iostream>
#include <string.h>
using namespace std;
 
int main()
{
   setlocale(0, "");
   int a,b,c,d;
   d=1;
   char rez[20];
   
   do
   {
       cout << "Введите первое число: ";
       (cin >> a).get();
       cout << "Введите второе число: ";
       (cin >> b).get();
       c = a + b;
       cout << "Cумма чисел = " << c << endl << "Программа выполнена успешно! Введите 'exit' для выхода или 'e' для вычисления еще одной суммы: " << endl;
   
       cin.getline(rez, 20);
   
   } while (strcmp(rez, "exit"));
 
   return 0;
}
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 22:47  [ТС]     Ошибка в программе #18
alsav22, спасибо Вам, но тут есть вещи которые мне еще не известны, а так я еще не прочитал до конца учебник(я собственно изучил пока только краткий курс), то не буду Вас мчать=)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 22:48     Ошибка в программе #19
Цитата Сообщение от SanychBY Посмотреть сообщение
но тут есть вещи которые мне еще не известны
Какие? getline()? strcmp()?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 22:49     Ошибка в программе
Еще ссылки по теме:

Ошибка в программе C++
C++ Ошибка в программе
Ошибка в программе C++

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

Или воспользуйтесь поиском по форуму:
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 22:49  [ТС]     Ошибка в программе #20
C++
1
2
(cin >> a).get();
cin.getline(rez, 20);
Yandex
Объявления
15.09.2013, 22:49     Ошибка в программе
Ответ Создать тему
Опции темы

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