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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.90
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
#1

getline, string, запись в файл, русский язык - C++

12.08.2013, 15:27. Просмотров 6007. Ответов 20
Метки нет (Все метки)

Кликните здесь для просмотра всего текста
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
#include <iostream> 
using std::ios;
using std::cin;
using std::cout;
using std::endl;
 
#include <string>
using std::string;
 
#include <fstream>
using std::ofstream;
using std::ifstream;
 
 
int main()
{
setlocale(LC_ALL,"");
 
ofstream MyFile("MyFile.txt", ios::out);
 
int sum;
string name;
 
cout << "Введите сумму: ";
cin >> sum;
cout << "Введите имя: ";
std::getline(cin, name);
 
MyFile << sum << endl;
MyFile << name << endl;
 
MyFile.close();
 
system("pause");
return 0;
}


Подскажите, программа компилируется, запускается, ввожу сумму, потом когда предлагает ввести имя, программа сам ввод пропускает, т.е. выводит на экран "Введите имя: " а сразу после этого "Для продолжения нажмите любую клавишу" (за счет system("pause")) в чем косяк?

И еще несколько вопрос, в чем разница между get() и getline() ? этот вопрос мне по ночам спать не дает
И еще, подскажите, как мне записать в файл string на русском языке?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2013, 15:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос getline, string, запись в файл, русский язык (C++):

String и русский язык - C++
Доброго времени суток! Мой вопрос скорее всего задавался, но всё же как с клавиатуры ввести в string строку на русском, а затем вывести...

Русский язык и тип string - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main () { setlocale...

Как в string использовать русский язык? - C++
как в string использовать русский язык, setlocale не помогает ...

Считывание из файла построчно и запись в файл построчно getline () - C++
# include &lt;iostream&gt; # include &lt;vector&gt; # include &lt;fstream&gt; # include &lt;string&gt; using namespace std; int main () { ...

Запись string в файл - C++
есть строка, я её должен записать в текстовый файл так,чтобы она разбилась на несколько строк , при этом длина каждой не превышала 10...

Запись в файл string - C++
не могу записать в файл string, в файл записываются цифры и символы, вот сама запись, а менять на char это одни проблемы появятся в коде,...

20
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.08.2013, 15:31 #2
Цитата Сообщение от VLK Посмотреть сообщение
ввожу сумму, потом когда предлагает ввести имя, программа сам ввод пропускает,
Везде, где есть cin >>, используйте такое:
C++
1
(cin >> sum).get();
1
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
12.08.2013, 15:39  [ТС] #3
Я не совсем понял (и явно не я в этом виноват), т.е. из-за строчки 25 ( cin >> sum ) у меня строчка 27 ( std::getline(cin, name) ) не работает?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.08.2013, 15:40 #4
Цитата Сообщение от VLK Посмотреть сообщение
в чем разница между get() и getline() ?
istream& get (char* s, streamsize n);
Если символ вообще не извлекается (например, сразу конец файла), то
в строку ввода помещается '\0' и устанавливается failbit (и eofbit).
Если вводится больше, чем n - 1, то в конец строки ввода помещается '\0', флаг ошибки НЕ устанавливается (в отличие от getline(char* s, streamsize n)). Не введённое (вмесе с '\n') остаётся в очереди.
Если конец файла, то устанавливает eofbit. ВАЖНО!!! ПОТОК С УСТАНОВЛЕННЫМ eofbit, ОБРАБАТЫВАЕТСЯ УСЛОВНЫМИ ОПЕРАТОРАМИ КАК true. ЕСЛИ ЖЕ В ПОТОКЕ УСТАНОВЛЕН failbit ИЛИ badbit, ТО КАК false.
Если пустая строка (т.е., '\n' - первый), то чтение останавливается и устанавливается failbit(в отличие от getline(char* s, streamsize )), символ '\n' остаётся в очереди (в отличие от getline(char* s, streamsize n)), в строку ввода помещается '\0';
Если символ перевода строки('\n', но не первый), то чтение останавливается, в конец строки
помещается '\0', символ '\n' остаётся в очереди (в отличие от getline(char* s, streamsize n)), поэтому если дальше будет get (char* s, streamsize n), то установится failbit.

istream& getline(char* s, streamsize n);
Если символ вообще не извлекается (например, сразу конец файла), то
в строку ввода помещается '\0' и устанавливается failbit (и eofbit).
Если вводится больше, чем n - 1, то в конец строки ввода помещается '\0' и
устанавливает failbit. Не введённое остаётся в очереди.
Если конец файла, то устанавливается eofbit. ВАЖНО!!! ПОТОК С УСТАНОВЛЕННЫМ eofbit, ОБРАБАТЫВАЕТСЯ УСЛОВНЫМИ ОПЕРАТОРАМИ КАК true. ЕСЛИ ЖЕ В ПОТОКЕ УСТАНОВЛЕН failbit ИЛИ badbit, ТО КАК false.
Если пустая строка (т.е., '\n' - первый), то чтение останавливается,
символ '\n' извлекается из очереди (в отличие от get (char* s, streamsize n)), но не сохраняется, в строку ввода помещается '\0' . Флаг ошибки НЕ устанавливается (в отличие от get (char* s, streamsize n)). Не введённое остаётся в очереди. Если символ перевода строки('\n', но не первый), то чтение останавливается, в конец строки помещается '\0', символ '\n' извлекается из очереди (в отличие от get (char* s, streamsize n)), но не сохраняется.

Добавлено через 31 секунду
Цитата Сообщение от VLK Посмотреть сообщение
т.е. из-за строчки 25 ( cin >> sum ) у меня строчка 27 ( std::getline(cin, name) ) не работает?
Да.
1
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
12.08.2013, 15:42 #5
Если перед cin.getline() был любой cin, то перед ним нужно поставить cin. ignore().
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
#include <iostream> 
using std::ios;
using std::cin;
using std::cout;
using std::endl;
 
#include <string>
using std::string;
 
#include <fstream>
using std::ofstream;
using std::ifstream;
 
 
int main()
{
setlocale (LC_ALL, ".1251"); // для ввода; 
 
 
ofstream MyFile("MyFile.txt", ios::out);
 
int sum;
string name;
 
cout << "Введите сумму: ";
cin >> sum;
cin.ignore();
cout << "Введите имя: ";
std::getline(cin, name);
setlocale (LC_ALL, ".866" ); // для вывода;
cout<<sum<<endl<<name<<endl;
 
MyFile << sum << endl;
MyFile << name << endl;
 
MyFile.close();
 
system("pause");
return 0;
}
1
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
12.08.2013, 15:46  [ТС] #6
А по поводу русского языка?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.08.2013, 15:47 #7
Цитата Сообщение от Valentina Посмотреть сообщение
setlocale (LC_ALL, ".1251"); // для ввода;
Это разве на ввод работает?
0
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
12.08.2013, 15:47  [ТС] #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Это разве на ввод работает?
В файл записывает каракули
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.08.2013, 15:48 #9
Цитата Сообщение от VLK Посмотреть сообщение
А по поводу русского языка?
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console
1
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
12.08.2013, 16:00  [ТС] #10
Самый короткий (и простой) путь для записи в файл русскими буквами это:

C++
1
2
3
4
#include <windows.h>
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
В свойствах консоли выбрать шрифт: Lucida Console

более простых нет?

Добавлено через 1 минуту
И еще как я заметил, приходится при создании каждой программы (консольной) приходится в ручную устанавливать шрифт: Lucida Console, можно этот как то по другому сделать, например прописать в код программы параметр, что бы он автоматически устанавливал шрифт: Lucida Console
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.08.2013, 16:06 #11
Цитата Сообщение от VLK Посмотреть сообщение
И еще как я заметил, приходится при создании каждой программы (консольной) приходится в ручную устанавливать шрифт: Lucida Console,
Почему вам приходится, а, например, мне нет? ОС какая?

Добавлено через 59 секунд
Цитата Сообщение от VLK Посмотреть сообщение
более простых нет?
Недостаточно просто? Есть более сложные...
1
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
12.08.2013, 16:10  [ТС] #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Почему вам приходится, а, например, мне нет? ОС какая?
Windows 7
честно сказать я сейчас впервые переключил шрифт на указанный, до этого с подобным не сталкивался, не было потребности.

Я создаю проект в MS VS и у меня по умолчанию создается с такими настройками: getline, string, запись в файл, русский язык

как переделать?
0
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
12.08.2013, 16:10  [ТС] #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Недостаточно просто? Есть более сложные...
Я поинтересовался, мало ли..
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.08.2013, 16:14 #14
Цитата Сообщение от VLK Посмотреть сообщение
честно сказать я сейчас впервые переключил шрифт на указанный, до этого с подобным не сталкивался, не было потребности.
Как тогда понимать это?
Цитата Сообщение от VLK Посмотреть сообщение
И еще как я заметил, приходится при создании каждой программы (консольной) приходится в ручную устанавливать шрифт: Lucida Console,
Как вы могли это заметить, если шрифт не устанавливали?

Добавлено через 59 секунд
Цитата Сообщение от VLK Посмотреть сообщение
как переделать?
Один раз установите и будет стоять.
0
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
12.08.2013, 16:22  [ТС] #15
Цитата Сообщение от alsav22 Посмотреть сообщение
Как тогда понимать это?

Дело было как, я установил Microsoft Visual Studio 2012, потом создал консольный проект, в нем был всего один файл, source.cpp и я в него записал следующий код для удобства :


Кликните здесь для просмотра всего текста
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
#include <iostream> 
 
#define rus setlocale(LC_ALL,""); 
#define pause system("pause");
 
 
 
 
 
 
int main()
{
rus;
 
 
 
 
 
 
 
 
 
 
 
 
 
pause;
return 0;
}


конечно многих знающих программистов улыбнёт этот код, но что поделать, надо с чего то начинать.

Потом я то, что получилось, сохранил как шаблон (Файл –> Экспорт шаблонов).

И теперь при создании новой программы, выбираю этот шаблон и в нем уже делаю программу.

Но каждая сделанная в нем программа имеет настройки шрифта такие, как показаны на скриншоте выше (и вообще лично я эти настройки шрифта ни где не задавал).
0
12.08.2013, 16:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2013, 16:22
Привет! Вот еще темы с ответами:

Запись string в бинарный файл - C++
Есть структура: struct Anketa { std::string name, family, brith_Date, tel; }; Надо что бы они записывали в бинарный файл...

Запись string в бинарный файл - C++
Здравствуйте еще раз! ^_^ Хочу понять, как правильно записывать бинарный файл и считывать информацию из него на примере string, т.к. с...

Запись string в бинарный файл - C++
Задача такая. Записать в бинарный файл строку string, а потом убедится, что все было записано верно. Помогите, если не сложно. Долго...

getline в string - C++
как сделать getline в string. ну чтобы считывало в string до нажатия enter с пробелами


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

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

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