Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 22:58     Ошибка в программе #21
C++
1
(cin >> a).get();
Всё равно, что:
C++
1
2
3
cin >> a;
cin.get(); // извлекает из потока чтения '\n', который попадает туда при нажатии Enter
              // нужно для того, чтобы getline() нормально сработала
Добавлено через 1 минуту
C++
1
cin.getline(rez, 20);
Читает в массив rez 20 - 1 символ, добавляет, в конец, считанного '\0'.

Добавлено через 3 минуты
Если перед getline() не извлечь из потока '\n', то getline() считает его первым, как пустую строку, и код, не останавливаясь на ввод, пойдёт дальше.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 23:00  [ТС]     Ошибка в программе #22
Цитата Сообщение от alsav22 Посмотреть сообщение
Читает в массив rez 20 - 1 символ, добавляет, в конец, считанного '\0'.
Цитата Сообщение от alsav22 Посмотреть сообщение
1
cin.getline(rez, 20);
Читает в массив rez 20 - 1 символ, добавляет, в конец, считанного '\0'.
Зачем?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 23:01     Ошибка в программе #23
Такую конструкцию ((cin >> a).get()) можно везде использовать, на всякий случай, чтобы избежать неожиданных ошибок.

Добавлено через 47 секунд
Цитата Сообщение от SanychBY Посмотреть сообщение
Зачем?
'\0' - это символ (маркер) конца строки С.
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 23:03  [ТС]     Ошибка в программе #24
Цитата Сообщение от alsav22 Посмотреть сообщение
get()
А что можно писать в скобках?

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
'\0' - это символ (маркер) конца строки С.
Есть строка exit, перем первый символ e и добавляем его в конец строки exite???
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 23:07     Ошибка в программе #25
Цитата Сообщение от SanychBY Посмотреть сообщение
А что можно писать в скобках?
В данном случае, ничего не нужно. Будет просто извлечение одного символа из потока.

Добавлено через 3 минуты
Цитата Сообщение от SanychBY Посмотреть сообщение
Есть строка exit, перем первый символ e и добавляем его в конец строки exite???
20 - 1, это 19. Т.е. читает на один символ меньше (чтобы осталось место для '\0'), чем второй параметр. Поэтому массив, куда читает getline(), должен быть на единицу больше, чем длина строки.
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 23:09  [ТС]     Ошибка в программе #26
Цитата Сообщение от alsav22 Посмотреть сообщение
20 - 1, это 19. Т.е. читает на один символ меньше (чтобы осталось место для '\0') чем второй параметр. Пэтому массив, куда читает getline(), должен быть на единицу больше, чем длина строки.
То есть getline() просто добавляет в конец '\0'?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 23:12     Ошибка в программе #27
Цитата Сообщение от SanychBY Посмотреть сообщение
То есть getline() просто добавляет в конец '\0'?
Что значит просто? cin.getline() - это метод чтения строк с консоли (так же, как и cin, но он читает до пробела). Т.е., вы вводите строку, getline() её считывает в массив, в конец добавляет '\0'.
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 23:16  [ТС]     Ошибка в программе #28
Цитата Сообщение от alsav22 Посмотреть сообщение
Что значит просто? cin.getline() это метод чтения с консоли. Т.е., вы вводите строку, getline() её считывает в массив, в конец добавляет '\0'.
А чем это отличается от cin >> a;?

Добавлено через 37 секунд
А чем это отличается от обычного cin >> a;?
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 23:16     Ошибка в программе #29
Цитата Сообщение от alsav22 Посмотреть сообщение
в конец добавляет '\0'.
я бы сказал, что вместо кода '\n' который возникает в момент нажатия на клавишу Enter, записывается нулевой символ '\0'
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 23:20     Ошибка в программе #30
Цитата Сообщение от SanychBY Посмотреть сообщение
А чем это отличается от cin >> a;?
getline() для чтения строк. cin может читать символы, слова (последовательность символов до первого пробельного символа), числа.
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
15.09.2013, 23:21  [ТС]     Ошибка в программе #31
Цитата Сообщение от alsav22 Посмотреть сообщение
getline() для чтения строк. cin может читать символы, слова (последовательность символов до первого пробельного символа), числа.
Все понятно. Спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 23:28     Ошибка в программе
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.09.2013, 23:28     Ошибка в программе #32
Цитата Сообщение от _ Посмотреть сообщение
я бы сказал, что вместо кода '\n' который возникает в момент нажатия на клавишу Enter, записывается нулевой символ '\0'
По-моему, так не стоит говорить, ведь getline() не обязательно читает до '\n'. '\n' третьим параметром по умолчанию стоит, но можно и другой символ задать. Просто, при строковом чтении, строка должна завершится '\0'.

Добавлено через 6 минут
И getline() в любом случае '\0' в конец считанного помещает, даже если '\n' не считан, а количество считанного уже на единицу меньше второго параметра, только при этом флаг ошибки установит. При этом всё, что не считалось ( в том числе и '\n) останется в очереди.
Yandex
Объявления
15.09.2013, 23:28     Ошибка в программе
Ответ Создать тему
Опции темы

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