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

Не даёт вводить (пропускает, проходит мимо), после первого ввода - C++

Восстановить пароль Регистрация
 
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 325
13.04.2013, 19:54     Не даёт вводить (пропускает, проходит мимо), после первого ввода #1
Здравствуйте такая проблема:
Надо строку с пробелами записать в массив (всё вроде просто: используй gets() и ок, но не там было) Когда идёт второй вызов функции gets() ввода не происходит, программа проходит мимо! что делать как быть? Код ниже.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>
#include <iostream>
#include <conio.h>
 
 
class emploeer  //базовый класс
{
public:
    emploeer()  //конструктор
    {
        printf("Input salary: ");
        scanf("%d", &this->salary);     //записали зарплату
        printf("Input full name: ");    
        gets(this->name);               //записали фио
        
    }
    virtual void print_info()   //печать ФИО и зарплаты (переопределённый метод)
    { 
        printf("\n\nPechat\' metodom bazovogo classa (class: emploeer)");
        printf("\nFull name: %s", name);
        printf("\nSalary without bonus: %d", salary);
    }
    ~emploeer(void){};  //деструктор
protected:
    char name [25];     //поле под ФИО
    int salary;         //поле под зарплату
};
 
 
class emplMiniBoss: public emploeer //производный класс 
{
public:
    emplMiniBoss()          //конструктор
    {
        printf("Input bonus: ");
        scanf("%d", &this->bonus);
    }
    ~emplMiniBoss(void){}   //деструктор
    virtual void print_info()       //печать ФИО и зарплаты (переопределённый метод)
    {
        printf("\n\nPechat\' metodm proizvodnogo classa (class: emplMiniBoss)");
        printf("\nFull name: %s", name);
        printf("\nSalary with bonus: %d", (salary+bonus));
    }
    int bonus;              //поле для бонусной зарплаты
};
 
 
 
char give_choise()
{
    int num;
    printf("\n1: Vizvat\' metod bazovogo classa (class: emploeer)");
    printf("\n2: Vizvat\' metod proizvodnogo classa (class: emplMiniBoss)");
    printf("\n   Chose [ 1 or 2 ]: ");
    scanf("%d", &num);
    return num;
}
 
int main()
{
    emploeer empl;              //Объект базового класса
    emplMiniBoss boss;          //Объект производного класса
    emploeer *ptr;              //Объявить переменную - указатель, имеющею тип базового класса ++
    
    ptr = &empl;                //Вначале настроить ее на объект базового класса. 
    ptr->print_info();          //Вызвать метод базового класса через указатель на объект. 
    ptr = &boss;                //Затем настроить ее на объект производного класса.
    ptr->print_info();          //Вызвать метод производного класса через указатель на объект.
 
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2013, 19:54     Не даёт вводить (пропускает, проходит мимо), после первого ввода
Посмотрите здесь:

После выполнения программа сразу закрывается и не даёт увидеть результат C++
Вылет после ввода первого числа C++
Вводить числа в диалоге с пользователем (до тех пор, пока он не откажется от ввода) C++
C++ Пропускает операторы считывания информации после первой итерации
C++ После ввода первого элемента программа вылетает
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
A1exSun
C#
51 / 51 / 1
Регистрация: 09.03.2013
Сообщений: 214
13.04.2013, 19:58     Не даёт вводить (пропускает, проходит мимо), после первого ввода #2
C++
1
scanf(%[^ ]s”, str);
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 325
13.04.2013, 20:01  [ТС]     Не даёт вводить (пропускает, проходит мимо), после первого ввода #3
Цитата Сообщение от A1exSun Посмотреть сообщение
C++
1
scanf(%[^ ]s”, str);
охохо таких интерпритаций нигде не встречал.... можно как-то иначе?
на крайний случай поясните, что это : [^ ]
A1exSun
C#
51 / 51 / 1
Регистрация: 09.03.2013
Сообщений: 214
13.04.2013, 20:08     Не даёт вводить (пропускает, проходит мимо), после первого ввода #4
Это форматируемый ввод. Работает?
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 325
13.04.2013, 20:12  [ТС]     Не даёт вводить (пропускает, проходит мимо), после первого ввода #5
Цитата Сообщение от A1exSun Посмотреть сообщение
Это форматируемый ввод. Работает?
отказывается: ведёт себя так же как и без скобок...
A1exSun
C#
51 / 51 / 1
Регистрация: 09.03.2013
Сообщений: 214
13.04.2013, 20:14     Не даёт вводить (пропускает, проходит мимо), после первого ввода #6
Значит я перепутал. Вот:
C++
1
scanf(%[^\n]”, str);
Читает все до \n.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2013, 20:31     Не даёт вводить (пропускает, проходит мимо), после первого ввода
Еще ссылки по теме:

C++ Как работает программа,если можно последовательные этапы, после запуска(что вводить и т.д.)
Программа не работает после первого if C++
C++ Пропускает строку ввода

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

Или воспользуйтесь поиском по форуму:
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 325
13.04.2013, 20:31  [ТС]     Не даёт вводить (пропускает, проходит мимо), после первого ввода #7
Цитата Сообщение от A1exSun Посмотреть сообщение
Значит я перепутал. Вот:
C++
1
scanf(%[^\n]”, str);
Читает все до \n.
нет. смотри он считывает цифру, которая была в потоке (в потоке это походу так выглядит : 1000\n) до \n всё забирает и записывает, потом когда снова пишет с потока опять видит \n и сразу списывает всё до него (т е ничего). Надо чистить поток! Верно так и есть!!!! ахахах нервный смех ахахаха

Короче, вот как надо:
C++
1
2
3
4
5
6
7
8
9
10
        printf("Input full name: ");    
        scanf("%[^\n]s", &this->name);
        //fflush (stdout);
        //fflush (stdin);
        //gets(this->name);             //записали фио
        //std::cin.getline(this->name,25);
        //std::cin>>this->name;
        printf("Input salary: ");
        scanf("%d", &this->salary);     //записали зарплату
        fflush (stdin);
он после первого круга зачищает входной поток и свободно потом в пустой поток записывает и считывает, и опять же его чистит...)

Добавлено через 23 секунды
без чистки не работало
Yandex
Объявления
13.04.2013, 20:31     Не даёт вводить (пропускает, проходит мимо), после первого ввода
Ответ Создать тему
Опции темы

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