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

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

Восстановить пароль Регистрация
 
Yashman
 Аватар для Yashman
1 / 3 / 0
Регистрация: 02.07.2011
Сообщений: 90
18.07.2011, 17:46     Проблемма с логическим оператором if #1
Всем привет. Мне надо было написать такую програмку: если пользователь вводит символ '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;
}
то все нормально.Как изменить ту часть с логическим оператором, что-бы программа работала как надо?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
 Аватар для co6ak
403 / 496 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
18.07.2011, 17:49     Проблемма с логическим оператором if #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
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2011, 17:57     Проблемма с логическим оператором if #3
Проблема в том, что get() считывает, НО не отбрасывает символ '\n', т.е. он остается в потоке, поэтому весь ввод идет по боку.
Вот так попробуй:
C++
1
 (cin >> choice).ignore();//17-ая строка в первом коде
т.е. удаляем (игнорируем) символ '\n' из потока.
Yashman
 Аватар для Yashman
1 / 3 / 0
Регистрация: 02.07.2011
Сообщений: 90
18.07.2011, 19:18  [ТС]     Проблемма с логическим оператором if #4
Всем спасибо за уделенное время, особенно Kastanida.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
18.07.2011, 19:21     Проблемма с логическим оператором if #5
Цитата Сообщение от Yashman Посмотреть сообщение
особенно Kastanida
Kastaneda ))
Yandex
Объявления
18.07.2011, 19:21     Проблемма с логическим оператором if
Ответ Создать тему
Опции темы

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