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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
#1

Ввод и вывод строки целиком - C++

04.06.2011, 13:08. Просмотров 2336. Ответов 8
Метки нет (Все метки)

Здравствуйте.
Как реализовать ввод и вывод строки целиком, с пробелами и прочим?

Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.06.2011, 13:13     Ввод и вывод строки целиком #2
gets(), fgets, cin.get(), cin.getline()
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
04.06.2011, 13:18  [ТС]     Ввод и вывод строки целиком #3
Спасибо, но можно поподробнее?
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.06.2011, 13:36     Ввод и вывод строки целиком #4
<stdio.h>
C
1
char *gets(char *s);
Считывает в строку s символы до первого перевода строки, возвращает указатель на s в случае считывания и NULL в случае ошибки. Символ перевода строки оставляет в потоке ввода. Как недостаток этой функции, возможен выход за пределы массива.
C
1
char *fgets(char *s, int n, FILE *stream);
Считывает n символов ИЛИ до первого перевода строки из потока stream в строку s. Возвращает указатель на s или NULL в случае ошибки.
<iostream.h>
C++
1
2
istream& get ( char* s, streamsize n, char delim );
istream& getline (char* s, streamsize n, char delim );
Считывает n символов ИЛИ пока не встретится символ delim в строку s. Разница между двумя функциями в том, что get помещает символ-разделитель delim в строку, getline - оставляет в потоке.
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
04.06.2011, 13:52  [ТС]     Ввод и вывод строки целиком #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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream> //
using std::cout;    //
using std::cin;     //
using std::endl;    //
                    //
#include <string>   //
using std::string;  //
                    //
#include <cstdlib>  //
using std::rand;    //
using std::srand;   //
                    //
#include <ctime>    //
using std::time;    //
                    //
#include <conio.h>  //
//////////////////////
 
int main ()
{ //____________________________________________________________________________//
        cout << "\t\t| Hello! Thank you for using this application! |" << endl; //
        cout << "\t\t|______________________________________________|" << endl; //
        cout << endl;                                                           //
        cout << "\t\t    This is enchant-emulator for Lineage 2.     " << endl; //
        cout << endl << endl;                                                   //
  //____________________________________________________________________________//
        
        char choice;    // выбор - будем снова играть или нет
  do
  {
        
        string name;    // имя предмета, который будем точить
        cout << "\t     Enter the name of thing, that you will enchant: ";
        cin >> name;
        
        cout << "\t   So, let's start! You will enchant your '" << name 
             << "'. Good luck!" << endl << endl;
             
        cout << "\t\t\tFor enchanting press any key..." << endl;
        cout << endl;
        
        
        int random;    // тот самый рандом (корейский)
        int enchant_level = 1;    // уровень заточки
        
// ---------------------------------------------------------------------------------------------------        
        
        // цикл для заточки до +4. Рандом не используем, ибо он нам тут нафиг не нужен (шанс = 100%)
        while (enchant_level <= 3)
        {
              getch();   // ждёт нажатия любой кнопки для продолжения
              
              cout << "\t\t   Congratulations! Now you have '" << name << " +"
                   << enchant_level << "'!" << endl;
                   
              enchant_level++;   // инкремент
        }
        
        cout << endl;
// -----------------------------------------------------------------------------------------------------        
        
        // цикл для заточки от 4 до 15. Шанс на успех = 66% (2/3)     
        srand (time (0) );
        while (enchant_level >= 3 && enchant_level <= 15)
        {
 
           random = 1 + rand() % 100;
        
           getch();   // ждём нажатия клавиши
        
           if (random <= 66)  // если выпало до 66, то заточилось
           { 
               cout << "\t\t   Congratulations! Now you have '" << name << " +"
                    << enchant_level << "'!" << endl;
                 
               enchant_level++;
           }
        
           else   // если нет, то фейл
           {   
              cout << "\tOh, no! Enchanting failed. Your '" << name 
                   << "' was broken for crystalls [>_<]";
                   
                   enchant_level = 0;   // условие прерывания цикла (сбрасываем заточку)
           }
        }
        
// ---------------------------------------------------------------------------------------------------------
        
        // даём напутствие на дальнейшую заточку
        if (enchant_level == 16)
           cout << endl << "\tWow! Fuckin' shit! Your '" << name 
                << "' is + 15 now! Please, don't fail it!" << endl;
        
        // заточка от 15 до 20. Шанс на успех = 33% (1/3)
        if (enchant_level >= 15)
        {
            srand (time (0) );
            while (enchant_level >=15 && enchant_level <= 20)
            {
               random = 1 + rand() % 100;
               
               getch ();   // ждём нажатия клавиши
                    
               if (random <= 33)   // если успех, то ОК
               {
                    cout << endl <<"\t Dance! Dance, fucking bastard! Your '" << name
                         << "' is +" << enchant_level << " now! Hell, yeah!";
                         
                         enchant_level++;
               }
               
               else    // случай неудачи
               {
                    cout << endl << "\t\t\t  FFFFFFFFFFUUUUUUUUUUUUU!" << endl 
                         << "\t    You have broken it! Go find too high tree and hang!";
                         
                         enchant_level = 0;   // сброс счётчика заточки; условие прерывания цикла
               }
            }
        }   
            
//--------------------------------------------------------------------------------------------------------------
            
        // поздравляем с победой, если таковая свершилась      
        if (enchant_level == 21)
        {
           cout << endl << endl << endl
                << "   Oh, my God! Your '" << name << "' is +20! 20! Now you can kill everybody and everything!";
           cout << endl << "\t\t\t\tEven GM's! ;)";
        }
        
        // спрашиваем, хотим ли сыграть ещё раз
        cout << endl << endl << "\t\t\tDo you want play again? [y/n]  ";
        cin >> choice;
        
      if (choice == 'y')
      {
         cout << ">______________________________________________________________________________<";      
         cout << endl << endl;
      }
      
      if (choice == 'n')
         cout << endl << "\t\t\t\tThank you! Bye!";
        
  } while (choice != 'n');
                
        getch();
        return 0;
}

В строках 32-34 мы запрашиваем название некоего предмета. Как сделать так, чтобы считывалось название полностью, а не только до пробела?
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.06.2011, 13:56     Ввод и вывод строки целиком #6
Для типа string отдельная функция есть
C++
1
2
istream& getline ( istream& is, string& str, char delim );
istream& getline ( istream& is, string& str );
Цитата Сообщение от vortexx1 Посмотреть сообщение
C++
1
cin >> name;
=>
C++
1
getline(cin, name);
dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
04.06.2011, 13:57     Ввод и вывод строки целиком #7
Цитата Сообщение от vortexx1 Посмотреть сообщение
cin >> name;
вам же обяснили что надо использовать.

например вместо:
C++
1
cin >> name;
C++
1
2
char name [20];
cin.getline(name,20)
где name имя 20 размер и все. Удачи и читайте книги)
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
04.06.2011, 13:59  [ТС]     Ввод и вывод строки целиком #8
Работает, понял, спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2011, 14:00     Ввод и вывод строки целиком
Еще ссылки по теме:
C++ Ввод и вывод строки собственного класса
Ввод в строки и вывод в консоль кириллицы C++
C++ Ввод/вывод строки с подсчетом количества слов
C++ Нахождение номера элемента строки - C++ через ввод вывод
C++ Написать парсер, разделяющий строки на подстроки (файловый ввод/вывод)

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

Или воспользуйтесь поиском по форуму:
Mиxaил
532 / 437 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
04.06.2011, 14:00     Ввод и вывод строки целиком #9
C++
1
2
3
std::string Str;
std::getline ( std::cin, Str);
std::cout << Str << std::endl;
Yandex
Объявления
04.06.2011, 14:00     Ввод и вывод строки целиком
Ответ Создать тему
Опции темы

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