Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219

Из scanf в std::cin

14.12.2010, 13:14. Показов 2178. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как тоже самое сделать с помощью std::cin?
C++
1
2
3
         printf("Введите автора %d книги.\n",i+1);
        scanf("%31s ",ar[i].author);
        fflush(stdin);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2010, 13:14
Ответы с готовыми решениями:

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++ 2005 Express Edition. Образ диска...

Не работает std::cout || std::cin
#include "Account.h" #include <string> #include <iostream> using std::cout; Account :: Account(int startBalance) { ...

Cin точнее scanf?
Здравствуйте. Во время написания кода и попытки понимания возникновения ошибки, отправил на проход тестов два идентичных кода, отличия были...

11
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 13:19
Если не ошыбаюсь, как-то так
C++
1
2
3
std::cout << "Введите автора" << i + 1 << " книги." << std::endl;
                std::cin >> ar[i].author;
                std::cin.clear();
0
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
14.12.2010, 13:23  [ТС]
asics, интересует конкретно вот это
C++
1
"%31s "
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 13:26
C++
1
std::cin.getline(ar[i].author, 31);
Так ?
1
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
14.12.2010, 15:50  [ТС]
Есть программа:
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
#include <tchar.h>
#include <iostream>
#include <cmath>
//#include <cstdio>
//#include "other.h"
 
 
using namespace std;
 
#define SIZE 32
#define   stop __asm nop
 
struct BOOK
{
    char author[SIZE];
    char title[SIZE];
    char category[SIZE];
    double price;
    int year;
    
};
 
BOOK globalBook;
 
int _tmain()
{
  setlocale( LC_ALL,"Russian" );
    BOOK localBook;
    static BOOK statBook;
    BOOK*dinBook= new BOOK;
stop
 
    
    BOOK *ar[]={&statBook,dinBook,&globalBook,&localBook};
    cout<<"\n\nСтруктуры. Задание 3"<<endl;
    const char *strBook[]={"автора","название","категорию","цену","год издания"};
    for(int j=0;j<4;j++)
    {
        for(int i=0;i<5;i++)
        {
            cout<<"Введите "<<strBook[i]<<" книги."<<endl;
            switch(i)
            {
            case 0:
                
                cin.getline(ar[j]->author,31);
                cin.clear();break;
            case 1:
                cin.getline(ar[j]->title,31);
                cin.clear();break;
            case 2:
                cin.getline(ar[j]->category,31);
                cin.clear();break;
            case 3:
                cin>>ar[j]->price;
                cin.clear();break;
            case 4:
                cin>>ar[j]->year;
                cin.clear();break;
            }
        }
    }
    return 0;
}
начиная со второй книги, не вводит автора. Просто проскакивает мимо.
В чем причина?
Миниатюры
Из scanf в std::cin  
0
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
14.12.2010, 19:25  [ТС]
актуально
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 19:45
Ану так
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 <tchar.h>
#include <iostream>
#include <cmath>
//#include <cstdio>
//#include "other.h"
 
 
using namespace std;
 
#define SIZE 32
#define   stop __asm nop
 
struct BOOK
{
        char author[SIZE];
        char title[SIZE];
        char category[SIZE];
        double price;
        int year;
 
};
 
BOOK globalBook;
 
int _tmain()
{
  setlocale( LC_ALL,"Russian" );
        BOOK localBook;
        static BOOK statBook;
        BOOK*dinBook= new BOOK;
 
 
        BOOK *ar[]={&statBook,dinBook,&globalBook,&localBook};
       // cout<<"\n\nСтруктуры. Задание 3"<<endl;
        const char *strBook[]={"avtora","nazvanie","katehoriu","ceny","hod izdanie"};
        for(int j=0;j<4;j++)
        {
                for(int i=0;i<5;i++)
                {
                        cout<<"vvedite "<<strBook[i]<<" knuhu."<<endl;
                        switch(i)
                        {
                        case 0:
 
                                cin.getline(ar[j]->author,31);
                                cin.ignore();
                                cin.clear();
                                break;
                        case 1:
                                cin.getline(ar[j]->title,31);
                                cin.clear();
                                cin.ignore();
                                break;
                        case 2:
                                cin.getline(ar[j]->category,31);
                                cin.clear();
                                cin.ignore();
                                break;
                        case 3:
                                cin>>ar[j]->price;
                                cin.clear();
                                cin.ignore();
                                break;
                        case 4:
                                cin>>ar[j]->year;
                                cin.clear();
                                cin.ignore();
                                break;
                        }
                }
        }
        return 0;
}
1
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
14.12.2010, 20:08  [ТС]
asics,
Так работает
и даже с русским языком
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
#include <tchar.h>
#include <iostream>
#include <cmath>
//#include <cstdio>
//#include "other.h"
 
 
using namespace std;
 
#define SIZE 32
#define   stop __asm nop
 
struct BOOK
{
        char author[SIZE];
        char title[SIZE];
        char category[SIZE];
        double price;
        int year;
        
};
 
BOOK globalBook;
 
int _tmain()
{
  setlocale( LC_ALL,"Russian" );
        BOOK localBook;
        static BOOK statBook;
        BOOK*dinBook= new BOOK;
stop
 
        
        BOOK *ar[]={&statBook,dinBook,&globalBook,&localBook};
        cout<<"\n\nСтруктуры. Задание 3"<<endl;
        const char *strBook[]={"автора","название","категорию","цену","год издания"};
        for(int j=0;j<4;j++)
        {
                for(int i=0;i<5;i++)
                {
                        cout<<"Введите "<<strBook[i]<<" книги."<<endl;
                        switch(i)
                        {
                        case 0:
                                
                                cin.getline(ar[j]->author,31);
                                cin.ignore();
                cin.clear();
                break;
                        case 1:
                                cin.getline(ar[j]->title,31);
                                cin.clear();
                cin.ignore();break;
                        case 2:
                                cin.getline(ar[j]->category,31);
                                cin.clear();
                cin.ignore();break;
                        case 3:
                                cin>>ar[j]->price;
                                cin.clear();
                cin.ignore();break;
                        case 4:
                                cin>>ar[j]->year;
                                cin.clear();
                cin.ignore();break;
                        }
                }
        }
        return 0;
}

Одно неудобство - два раза Enter приходиться нажимать. Можно как то исправить?
Можете объяснить, почему автора во всех последующих книгах не удавалось ввести и каким образом cin.ignore() это исправляет?
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 20:20
Цитата Сообщение от st_dent Посмотреть сообщение
Одно неудобство - два раза Enter приходиться нажимать. Можно как то исправить?
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
#include <tchar.h>
#include <iostream>
#include <cmath>
//#include <cstdio>
//#include "other.h"
 
 
using namespace std;
 
#define SIZE 32
#define   stop __asm nop
 
struct BOOK
{
        char author[SIZE];
        char title[SIZE];
        char category[SIZE];
        double price;
        int year;
 
};
 
BOOK globalBook;
 
int _tmain()
{
  setlocale( LC_ALL,"Russian" );
        BOOK localBook;
        static BOOK statBook;
        BOOK*dinBook= new BOOK;
 
 
        BOOK *ar[]={&statBook,dinBook,&globalBook,&localBook};
        //cout<<"\n\nСтруктуры. Задание 3"<<endl;
        const char *strBook[]={"avtora","nazvanie","katehoriu","ceny","hod izdanie"};
        for(int j=0;j<4;j++)
        {
                for(int i=0;i<5;i++)
                {
                        cout<<"vvedite "<<strBook[i]<<" knuhu."<<endl;
                        switch(i)
                        {
                        case 0:
 
                                cin.getline(ar[j]->author,31);
                                cin.sync();
                                break;
                        case 1:
                                cin.getline(ar[j]->title,31);
                                cin.sync();
                                break;
                        case 2:
                                cin.getline(ar[j]->category,31);
                                cin.sync();
                                
                                break;
                        case 3:
                                cin>>ar[j]->price;
                                cin.sync();
                                break;
                        case 4:
                                cin>>ar[j]->year;
                                cin.sync();
                                break;
                        }
                }
        }
        return 0;
}
1
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
14.12.2010, 20:36  [ТС]
asics,
всё-таки работает
вот так
. А то при переполнении массива - вылетает.
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
 case 0:
                                
                                cin.getline(ar[j]->author,31);
                cin.sync();
                cin.clear();
                break;
                        case 1:
                                cin.getline(ar[j]->title,31);
                                cin.sync();
                cin.clear();
                break;
                        case 2:
                                cin.getline(ar[j]->category,31);
                cin.sync();
                cin.clear();
                break;
                        case 3:
                                cin>>ar[j]->price;
                cin.sync();
                cin.clear();
                break;
                        case 4:
                                cin>>ar[j]->year;
                cin.ignore();
                cin.clear();
                break;

а как с этим?
Можете объяснить, почему автора во всех последующих книгах не удавалось ввести и каким образом cin.ignore() это исправляет?
и что нам дала cin.sync()?
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 20:43
st_dent, cin.sync() - очищение буфера стандартного ввода.
Остальное тут или тут.
1
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
19.12.2010, 20:06
Цитата Сообщение от st_dent Посмотреть сообщение
интересует конкретно вот это
C++
1
"%31s "
C++
1
2
3
#include <iomanip>
//...
std::cin >> std::setw(SIZE) >> ar[i].author;
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.12.2010, 20:06
Помогаю со студенческими работами здесь

Операторы cin и scanf
Пример кода: void func(float* p){ cout &lt;&lt; &quot;Введите значение&quot;; scanf(&quot;%f\n&quot;, &amp;p); } Как можно прочитать ссылку через cin ? При...

Scanf vs cin (double variant)
double k = 0.0; scanf(&quot;%f&quot;, &amp;k); double k1 = 0.0 cin &gt;&gt; k1; Вводим -1,5. Получаем: k = 1.589424581709e-314#DEN double k1...

Переделаем вместе scanf() в cin>>
Был исходник: void Comp::Get() // Ввод данных с клавиатуры =) { printf (&quot;\n Введите действительную часть числа &quot;); scanf...

Заменить cin / cout на scanf / printf
#include&lt;iostream&gt; #include&lt;locale.h&gt; #include&lt;Windows.h&gt; #include&lt;string&gt; #include &quot;123.h&quot; using namespace std; float...

Переделать scanf, printf в cin, cout
Как в этом коде заменить scanf, printf на cin, cout. А FILE * f = fopen изменить на ifstream in(&quot;INPUT.TXT&quot;); ofstream...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru