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

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

Войти
Регистрация
Восстановить пароль
 
Yashman
1 / 3 / 0
Регистрация: 02.07.2011
Сообщений: 90
#1

Проблемма с логическим оператором if - C++

18.07.2011, 17:46. Просмотров 415. Ответов 4
Метки нет (Все метки)

Всем привет. Мне надо было написать такую програмку: если пользователь вводит символ 'y' (yes), то он задаёт данные в структуру, которые в последствии отображаются, а елси пользователь вводит символ 'n' (no), то на экран выводятся данные структуры по умолчанию. Вот моя неправильно работающая программа:


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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;
 
struct CandyBar 
{
       char name[20];
       double mass;
       int calory;
};
void show_struct (CandyBar & ChocoBar, char *pt = "Millennium Munch", double m = 2.85, int c = 350);
 
int main()
{
    CandyBar ChocoBar;
    cout << "Would you like to give some info for a struct? (type 'y' if yes and 'n' if no) : ";
    char choice;
    cin >> choice;
    if (choice == 'n')
    show_struct(ChocoBar);
    else if (choice == 'y')
    {
      cout << "Enter candy's name: ";
          cin.get(ChocoBar.name, 20).get();
          cout << "Enter candy's mass: ";
          (cin >> ChocoBar.mass).get();
          cout << "Enter candy's calory: ";
          (cin >> ChocoBar.calory).get();
           show_struct (ChocoBar, ChocoBar.name, ChocoBar.mass, ChocoBar.calory);
    }
 
        system("pause > nul");
        return 0;
}
 
void show_struct (CandyBar & ChocoBar, char *pt, double m, int c)
{
     cout << "Candy's name: " << pt << endl;
     cout << "Candy's mass: " << m << endl;
     cout << "Candy's calory: " << c << endl;
}
её результат выполнения нормален, если ввести символ 'n', но елси ввести 'y', то выходит такой бред:

Would you like to give some info for a struct? (type 'y' if yes and 'n' if no) :
y
Enter candy's name: Enter candy's mass: Enter candy's calory: Candy's name:
Candy's mass: 5.00792e-312
Candy's calory: 228

если убрать в программе логический оператор, что-бы вышло

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
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
 
struct CandyBar 
{
       char name[20];
       double mass;
       int calory;
};
void show_struct (CandyBar & ChocoBar, char *pt = "Millennium Munch", double m = 2.85, int c = 350);
 
int main()
{
    CandyBar ChocoBar;
    cout << "Enter some info for a struct: ";
      cout << "Enter candy's name: ";
          cin.get(ChocoBar.name, 20).get();
          cout << "Enter candy's mass: ";
          (cin >> ChocoBar.mass).get();
          cout << "Enter candy's calory: ";
          (cin >> ChocoBar.calory).get();
           show_struct (ChocoBar, ChocoBar.name, ChocoBar.mass, ChocoBar.calory);
 
        system("pause > nul");
        return 0;
}
 
void show_struct (CandyBar & ChocoBar, char *pt, double m, int c)
{
     cout << "Candy's name: " << pt << endl;
     cout << "Candy's mass: " << m << endl;
     cout << "Candy's calory: " << c << endl;
}
то все нормально.Как изменить ту часть с логическим оператором, что-бы программа работала как надо?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2011, 17:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проблемма с логическим оператором if (C++):

Проблема с логическим инвертированием - C++
Если например пишу такой код bool a = false; a = ~a; a = ~a; то после выполнения данного кода значение переменной a равно true,...

Игры с логическим типом данных - C++
Доброго времени суток! Играюсь с логическим типом данных. Если присвоить логической переменной положительно число (дробное в том...

Разьясните синтаксис с логическим отрицанием - C++
int main(int argc, char* argv) { bool done; do { char c; cin&gt;&gt;c; done=(c!='y'); } while(!done); ...

Что то нето с логическим выражением - C++
Показывает какую то ошибку подскажите где ошибка? #include &quot;stdafx.h&quot; #include &quot;math.h&quot; int _tmain(int argc, _TCHAR* argv) { int...

Не могу разобраться с логическим выражением в if - C++
Доброго всем дня, разбираюсь в чужом коде и застрял на этой вот строчке: if(!GetIsCurrentUserHas(OutdorAdminUnitID) &amp;&amp; Value != 0) ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
18.07.2011, 17:49 #2
C++
1
2
3
4
5
6
cout << "Enter candy's name: ";
          cin.get(ChocoBar.name, 20).get();
          cout << "Enter candy's mass: ";
          (cin >> ChocoBar.mass).get();
          cout << "Enter candy's calory: ";
          (cin >> ChocoBar.calory).get();
заменить на
C++
1
2
3
4
5
6
cout << "\nEnter candy's name: \n" ;
          cin.get(ChocoBar.name, 20).get(); 
          cout << "\nEnter candy's mass: \n";
          (cin >> ChocoBar.mass).get();
          cout << "\nEnter candy's calory: \n";
          (cin >> ChocoBar.calory).get();
Добавлено через 1 минуту
это лишь для структурирования. а вот что такое cin.get() я не знаю.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
18.07.2011, 17:57 #3
Проблема в том, что get() считывает, НО не отбрасывает символ '\n', т.е. он остается в потоке, поэтому весь ввод идет по боку.
Вот так попробуй:
C++
1
 (cin >> choice).ignore();//17-ая строка в первом коде
т.е. удаляем (игнорируем) символ '\n' из потока.
Yashman
1 / 3 / 0
Регистрация: 02.07.2011
Сообщений: 90
18.07.2011, 19:18  [ТС] #4
Всем спасибо за уделенное время, особенно Kastanida.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
18.07.2011, 19:21 #5
Цитата Сообщение от Yashman Посмотреть сообщение
особенно Kastanida
Kastaneda ))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2011, 19:21
Привет! Вот еще темы с ответами:

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

Проблемма с кодом - C++
Помогите пожалуйста,если кто знает, нужно перевести этот код на С++. procedure OGI(R,S,M,N:integer;Var A:matrix); {R,S –...

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

Проблемма с вложенными классами - C++
Собственно, код программы. Компилятору не нравятся строки №41 и 47. Можете подсказать, в чем может быть причина? Компилятор gcc 4.5 ...


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

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

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