Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
#1

Из scanf в std::cin - C++

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

Как тоже самое сделать с помощью std::cin?
C++
1
2
3
         printf("Введите автора %d книги.\n",i+1);
        scanf("%31s ",ar[i].author);
        fflush(stdin);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2010, 13:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из scanf в std::cin (C++):

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

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

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

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

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

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

11
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 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
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
14.12.2010, 13:23  [ТС] #3
asics, интересует конкретно вот это
C++
1
"%31s "
0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 13:26 #4
C++
1
std::cin.getline(ar[i].author, 31);
Так ?
1
st_dent
64 / 64 / 3
Регистрация: 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;
}
начиная со второй книги, не вводит автора. Просто проскакивает мимо.
В чем причина?
0
Миниатюры
Из scanf в std::cin  
st_dent
64 / 64 / 3
Регистрация: 05.07.2010
Сообщений: 219
14.12.2010, 19:25  [ТС] #6
актуально
0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 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
st_dent
64 / 64 / 3
Регистрация: 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
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 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
st_dent
64 / 64 / 3
Регистрация: 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
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
14.12.2010, 20:43 #11
st_dent, cin.sync() - очищение буфера стандартного ввода.
Остальное тут или тут.
1
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2010, 20:06
Привет! Вот еще темы с ответами:

Какая разница между cin и scanf? - C++
Здраствуйте. А какая разница между cin и scanf?

printf и scanf против cin и cout - C++
Друзья мои,стал учить плюсы и столкнулся с кучей противоречий. То что в С нет cin/cout я знаю. Но вот в С++ возможно использование...

scanf,cin разбор ввода данных - C++
Доброго времени суток :) Подскажите как взять с консоли или скажем с файла(fscanf) 2 числа и текст между (текст и числа разделены знаками...

Ограничение на ввод символов scanf() и cin - C++
Здравствуйте. Возможно ли ограничить ввод символов после вызова scanf() или cin? Нужно чтоб после вызова этих функций пользователь...


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

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

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