64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
1

Из scanf в std::cin

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

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

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

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

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

Операторы cin и scanf
Пример кода: void func(float* p){ cout << "Введите значение"; scanf("%f\n", &p); } Как...

11
Freelance
Эксперт С++
2890 / 1825 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 13:19 2
Если не ошыбаюсь, как-то так
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  [ТС] 3
asics, интересует конкретно вот это
C++
1
"%31s "
0
Freelance
Эксперт С++
2890 / 1825 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 13:26 4
C++
1
std::cin.getline(ar[i].author, 31);
Так ?
1
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
14.12.2010, 15:50  [ТС] 5
Есть программа:
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  [ТС] 6
актуально
0
Freelance
Эксперт С++
2890 / 1825 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 19:45 7
Ану так
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  [ТС] 8
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
Эксперт С++
2890 / 1825 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 20:20 9
Цитата Сообщение от 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  [ТС] 10
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
Эксперт С++
2890 / 1825 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 20:43 11
st_dent, cin.sync() - очищение буфера стандартного ввода.
Остальное тут или тут.
1
2021 / 1620 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
19.12.2010, 20:06 12
Цитата Сообщение от st_dent Посмотреть сообщение
интересует конкретно вот это
C++
1
"%31s "
C++
1
2
3
#include <iomanip>
//...
std::cin >> std::setw(SIZE) >> ar[i].author;
2
19.12.2010, 20:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2010, 20:06
Помогаю со студенческими работами здесь

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 =...

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

Заменить 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;...

Переделать scanf, printf в cin, cout
Как в этом коде заменить scanf, printf на cin, cout. А FILE * f = fopen изменить на ifstream...

Заменить cout и cin на scanf и printf
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int calculate(int d1, int d2,...

Заменить printf на cout, scanf на cin
Помогите заменить printf на cout ,scanf на cin, у меня не получается. int main() { int...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru