Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/50: Рейтинг темы: голосов - 50, средняя оценка - 4.76
 Аватар для vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269

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

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

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

Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2011, 13:08
Ответы с готовыми решениями:

Ввод строки из потокового файла целиком
В файле строка format ascii 1.0, оператор File>>Buffer; вводит только "format". А как ввести целиком до символа перевода...

Ввод с клавиатуры строки символов, вывод строки в обратном порядке на принтер
Составить программу для ввода с клавиатуры строки символов "Периферийные устройства ЭВМ" в окно ввода. Записать строку в буфер buf и...

Ввод строк целиком
Написал программу, в которой сортируются структуры данных. Т.е. пользователь вводит кол-во книг и информацию о книгах. Поля имеют...

8
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
04.06.2011, 13:13
gets(), fgets, cin.get(), cin.getline()
1
 Аватар для vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
04.06.2011, 13:18  [ТС]
Спасибо, но можно поподробнее?
0
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
04.06.2011, 13:36
<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 - оставляет в потоке.
1
 Аватар для vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
04.06.2011, 13:52  [ТС]
Ммммм... Что-то я не очень понимаю...
Вот, например, у меня есть программа:

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 мы запрашиваем название некоего предмета. Как сделать так, чтобы считывалось название полностью, а не только до пробела?
0
 Аватар для kazak
3599 / 2741 / 354
Регистрация: 11.03.2009
Сообщений: 6,298
04.06.2011, 13:56
Для типа 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);
1
 Аватар для dederkay
46 / 46 / 4
Регистрация: 08.12.2010
Сообщений: 161
04.06.2011, 13:57
Цитата Сообщение от vortexx1 Посмотреть сообщение
cin >> name;
вам же обяснили что надо использовать.

например вместо:
C++
1
cin >> name;
C++
1
2
char name [20];
cin.getline(name,20)
где name имя 20 размер и все. Удачи и читайте книги)
1
 Аватар для vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
04.06.2011, 13:59  [ТС]
Работает, понял, спасибо.
0
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
04.06.2011, 14:00
C++
1
2
3
std::string Str;
std::getline ( std::cin, Str);
std::cout << Str << std::endl;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.06.2011, 14:00
Помогаю со студенческими работами здесь

Написать программу разрешающую ввод строки не более 80 символов и вывод на экран этой строки красным цветом
Ассемблер. Написать программу разрешающую ввод строки не более 80 символов и вывод на экран этой строки красным цветом

Ввод/вывод строки
#include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; #include &lt;string&gt; using std::strlen; using...

Ввод/вывод строки
Писал большой проект, но определенный модуль не работал так, как нужно После нескольких часов поиска ошибки, оказалось, что неправильно...

Вывод и ввод строки
Как мне получить строку, введённую пользователем, и вывести в консоль? То же что и на Python: print(input()) Добавлено через 17...

Ввод и вывод строки
&quot;Напишите программу, которая вводит строку и выводит её, сокращая каждый раз на 1 символ до тех пор, пока в строке не останется 1...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru