Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
1 / 1 / 0
Регистрация: 30.05.2023
Сообщений: 4

Ввод с клавиатуры данных в массив

31.05.2023, 16:22. Показов 9441. Ответов 85
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описать структуру с именем note, содержащую следующие поля:
 фамилия, имя;
 номер телефона;
 дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
 ввод с клавиатуры данных в массив, состоящий из максимум 8 элементов типа note,
причем сделать возможность прервать ввод, чтобы можно было не вводить все 8
элементов; после окончания ввода отсортировать элементы массива по алфавиту;
 вывод в консоль информации о людях, чьи дни рождения приходятся на месяц, значение
которого введено с клавиатуры;
 если таких нет, вывести соответствующее сообщение;
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.05.2023, 16:22
Ответы с готовыми решениями:

Ввод с клавиатуры данных в массив
Написать программу выполняющую след. действия: -ввод с клавиатуры данных в массив состоящий из 10-ти структур типа Worker( с...

Ввод с клавиатуры данных в массив
Нужна помощь, 1)Определить класс с именем AEROFLOT, содержащий след поля: название пункта назначения рейса; номер рейса; тип...

Ввод данных в массив с клавиатуры
Ребят помогите.Нужен код , который бы заполнял массив с клавиатуры 3х4 . Вот код ввода данных с клавиатуры vvodcifri // ввод...

85
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
29.07.2023, 20:15
Студворк — интернет-сервис помощи студентам
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
30.07.2023, 00:17
Цитата Сообщение от AlexProgramm Посмотреть сообщение
а с setLocale у мегя все равно коверкались русские буквы
Чуть не забыл. В соседней теме (и еще одной, посвященной срачу, но про нее лучше забудем) подсказали как доработать мой костыль чтобы он хотя бы на win10 позволял вводить русские буквы. На более старых системах (даже win7) он не спасает. Но все лучше, чем ничего. В общем, вот пример ввода и вывода текста. Если не забуду, доработаю и код задачи чтобы не только с обычной консолью работал, но и на win10.
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
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
 
#ifdef WIN32 //специальные костыли для виндовой консоли
  #include <windows.h>
  #include "fcntl.h"
  __attribute__((constructor)) void coninit(){
    SetConsoleCP(CP_UTF8); SetConsoleOutputCP(CP_UTF8);
    _setmode(_fileno(stdout), _O_U8TEXT);
    _setmode(_fileno(stdin), _O_U16TEXT);
  }
#endif
 
int main(){
  setlocale(LC_ALL, "");
  wchar_t str[100];
  wprintf(L"Проверка ввода текста в консоли. Введите текст: ");
  wscanf(L"%ls", str);
  for(int i=0; str[i]!=0; i++){
    wprintf(L"[%lc] = 0x%4X\n", str[i], (int)str[i]);
  }
  return 0;
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
$ gcc main.c -Wall -Wextra -Wpedantic -Werror
$ ./a.out 
Проверка ввода текста в консоли. Введите текст: qweфывαβγ
[q] = 0x  71
[w] = 0x  77
[e] = 0x  65
[ф] = 0x 444
[ы] = 0x 44B
[в] = 0x 432
[α] = 0x 3B1
[β] = 0x 3B2
[γ] = 0x 3B3
1
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 00:41
COKPOWEHEU,
О чём это я?
Вы пишете под свой компилятор и пропагандируете его в массы.
Но существует дохрена других. И на них всё по другому....
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
30.07.2023, 01:02
Цитата Сообщение от Наталья8 Посмотреть сообщение
Но существует дохрена других. И на них всё по другому....
Единственная gcc-специфика, которой я воспользовался - атрибут contructor. В некоторых других компиляторах его нет, и coninit() придется вызывать вручную. Но отделение костылей от нормального кода мне показалось более важным.
В принципе, к виндовым костылям можно еще добавить настройку, заставляющую msvs следовать стандартам, про нее я и правда забыл. #define _CRT_SECURE_NO_WARNINGS и, кажется, еще что-то было.
---
А что еще нестандартного вы в моем коде увидели?
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 01:06


Pelles C скомпилировал.
Только он не останавливаеться закрывает окно...

Добавлено через 30 секунд
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
#define _CRT_SECURE_NO_WARNINGS
Ни разу не помогало...

Добавлено через 1 минуту
#ifdef WIN32 //специальные костыли для виндовой консоли
Аа Это вы для винды специально.

Добавлено через 1 минуту
Кодеблок ставить не хочеться..







Цитата Сообщение от Наталья8 Посмотреть сообщение
#define _CRT_SECURE_NO_WARNINGS
А здесь вам чё вставить?


Вот это скомпилировало. Конструктор рабочий...
Это формочка на winApi. кто не в курсе.


Не желает знать swprintf. У каждого конструктора свои особенности.
Серьёзный код пишешь под свой конструктор.
(инклады расставлены правильно)
При наведении курсора функцию опознаёт....
Научиться писать под другой конструктор, долго мучиться надо...
(с++11 я включил)

Добавлено через 1 час 32 минуты
CodeBlocks обновил. Час переводил проект с msvs,
swprintf знает, не перевёл.
Спать пора...


Вот такие штуки там ещё...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
30.07.2023, 05:30
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В общем, вот пример ввода и вывода текста.
В gcc (gcc (tdm64-1) 10.3.0) отработало, clang и cl от msvs предсказуемо стороной прошли.
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вот такие штуки там ещё..
Всё-то в ваших виндовсах через ж... Не по-людски как-то...

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
C:\prog\c\string>rus_clang.exe
Проверка ввода текста в консоли. Введите текст: йцукен
 
C:\prog\c\string>rus_gcc.exe
Проверка ввода текста в консоли. Введите текст: йцукен
[й] = 0x 439
[ц] = 0x 446
[у] = 0x 443
[к] = 0x 43A
[е] = 0x 435
[н] = 0x 43D
 
C:\prog\c\string>rus_msvs.exe
Проверка РІРІРѕРґР° текста РІ консоли. Введите текст: йцукен
 
C:\prog\c\string>
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
30.07.2023, 08:52
Цитата Сообщение от Наталья8 Посмотреть сообщение
<скриншот>
Pelles C скомпилировал.
Только он не останавливаеться закрывает окно...
Ну вот видите, все работает правильно.
Цитата Сообщение от Наталья8 Посмотреть сообщение
Аа Это вы для винды специально.
Ну это же у нее с вводом проблемы. В обычной консоли костыли не требуются.
Цитата Сообщение от Наталья8 Посмотреть сообщение
#define _CRT_SECURE_NO_WARNINGS
Ни разу не помогало...
Это должно помочь, когда msvs настаивает на замене стандартных функций вроде strcpy своими нестандартными аналогами вроде strcpy_s.
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вот это скомпилировало. Конструктор рабочий...
Вот и как вас цитировать, если вы скриншоты кидаете вместо текста?
Что какой-то компилятор ругается на майкрософтовские константы, так надо смотреть где они объявлены и какие файлы пытается подключить компилятор.
Цитата Сообщение от Наталья8 Посмотреть сообщение
Не желает знать swprintf
Только что перепроверил, вот скриншот из стандарта С11.
Цитата Сообщение от Наталья8 Посмотреть сообщение
Научиться писать под другой конструктор
Имеете в виду "освоить новую среду разработки или новый компилятор" что ли? Никогда не слышал чтобы их конструкторами называли...
Цитата Сообщение от easybudda Посмотреть сообщение
C:\prog\c\string>rus_msvs.exe
Проверка РІРІРѕРґР° текста РІ консоли. Введите текст: йцукен
Такое ощущение, что у вас кодировка исходника какая-то странная.
Миниатюры
Ввод с клавиатуры данных в массив  
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
30.07.2023, 10:19
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если не забуду, доработаю и код задачи чтобы не только с обычной консолью работал, но и на win10.
Ну, например, так:
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
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <inttypes.h>
#include <wctype.h>
#include <stdlib.h>
 
#ifdef WIN32 //специальные костыли для виндовой консоли
  #include <windows.h>
  #include "fcntl.h"
  __attribute__((constructor)) void coninit(){
    SetConsoleCP(CP_UTF8); SetConsoleOutputCP(CP_UTF8);
    _setmode(_fileno(stdout), _O_U8TEXT);
    _setmode(_fileno(stdin), _O_U16TEXT);
  }
#endif
 
typedef struct{
  wchar_t name[50];
  wchar_t surname[50];
  char phone[20];
  struct{
    uint8_t d, m;
    uint16_t y;
  }birth;
}person_t;
 
#define PERINP_ERR  0
#define PERINP_NEXT 1
#define PERINP_FIN  2
char person_input(person_t *p){
  do{
    wprintf(L"Input Name, Surname, phone number and birth day: ");
    int res = wscanf(L"%ls %ls %s %"SCNu8".%"SCNu8".%"SCNu16"", p->name, p->surname, p->phone, &(p->birth.d), &(p->birth.m), &(p->birth.y));
    if(res != 6)return PERINP_ERR;
    wprintf(L"Control: name = [%ls] ; surname = [%ls] ; phone = [%s] ; birth day = %i.%i.%i\n", p->name, p->surname, p->phone, (p->birth.d), (p->birth.m), (p->birth.y));
    wprintf(L"'n' - next person, 'r' - retry input, 'e' - exit\n");
    wchar_t ans = 1;
    do{
      ans = getwc(stdin);
      ans = towlower(ans);
    }while(ans != L'n' && ans != L'r' && ans != L'e');
    if(ans == L'e')return PERINP_FIN;
    if(ans == L'n')return PERINP_NEXT;
  }while(1);
}
 
static int percmp_name(const void *p1, const void *p2){
  return wcscmp( ((person_t*)p1)->name, ((person_t*)p2)->name );
}
 
int main(){
  setlocale(LC_ALL, "");
  size_t percount = 0, permax = 0;
  person_t *person = NULL;
  //input
  char res = PERINP_NEXT;
  while(res == PERINP_NEXT){
    if(percount >= permax){
      permax += 2;
      person_t *n = realloc(person, sizeof(person_t)*permax);
      if(n == NULL){
        fwprintf(stderr, L"Can not allocate %i bytes\n", permax);
        res = PERINP_ERR;
        break;
      }
      person = n;
    }
    res = person_input(&person[percount]);
    if(res != PERINP_ERR)percount++;
  }
  if(res == PERINP_ERR){
    fwprintf(stderr, L"Input error\n");
    free(person);
    return 1;
  }
 
  //sort by name
  qsort(person, percount, sizeof(person_t), percmp_name);
 
  //control
  wprintf(L"Control:\n");
  for(size_t i=0; i<percount; i++){\
    wprintf(L"%ls: %i.%i.%i\n", person[i].name, person[i].birth.d, person[i].birth.m, person[i].birth.y);
  }
 
  //search for month
  wprintf(L"Inputh month number: ");
  uint16_t mon;
  wscanf(L"%"SCNu16"", &mon);
  char per_found = 0;
  for(size_t i=0; i<percount; i++){
    if(person[i].birth.m != mon)continue;
    wprintf(L"%ls %ls, %i.%i.%i, phone = %s\n", person[i].name, person[i].surname, person[i].birth.d, person[i].birth.m, person[i].birth.y, person[i].phone);
    per_found = 1;
  }
  if(!per_found)wprintf(L"No persond with %i month found\n", mon);
 
  free(person);
  return 0;
}
Code
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
PS Z:\> .\a.exe
Input Name, Surname, phone number and birth day: Иван Иванов 01 25.08.94
Control: name = [Иван] ; surname = [Иванов] ; phone = [01] ; birth day = 25.8.94
'n' - next person, 'r' - retry input, 'e' - exit
т
n
Input Name, Surname, phone number and birth day: Петр Петров 02 45.11.23
Control: name = [Петр] ; surname = [Петров] ; phone = [02] ; birth day = 45.11.23
'n' - next person, 'r' - retry input, 'e' - exit
r
Input Name, Surname, phone number and birth day: Петр Петров 02 15.11.23
Control: name = [Петр] ; surname = [Петров] ; phone = [02] ; birth day = 15.11.23
'n' - next person, 'r' - retry input, 'e' - exit
n
Input Name, Surname, phone number and birth day: А это кто 1.1.1
Control: name = [А] ; surname = [это] ; phone = [кто] ; birth day = 1.1.1
'n' - next person, 'r' - retry input, 'e' - exit
e
Control:
А: 1.1.1
Иван: 25.8.94
Петр: 15.11.23
Inputh month number: 8
Иван Иванов, 25.8.94, phone = 01
PS Z:\>
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 12:17
Цитата Сообщение от easybudda Посмотреть сообщение
Всё-то в ваших виндовсах через ж
Это в GNU проектах всё так. visual studio всё нормально...

Добавлено через 2 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Это должно помочь, когда msvs настаивает на замене стандартных функций вроде strcpy
C++
1
#pragma warning(disable : 4996)
Вот такое пишу..
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 12:24

Самый вменяемый из всей остальной кучи мусора.
Можно привыкнуть если захотеть...
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 12:42
With MSVC (and thus the Microsoft STL), a constructor for filestreams is provided which takes a const wchar_t* filename, allowing you to create the stream as:

C++
1
2
wchar_t const name[] = L"filename.txt";
std::fstream file(name);
На CodeBlocks -------
main.cpp|170|error: no matching function for call to 'std::basic_fstream<char>::basic_fstream (const wchar_t [13])'|

Надо адрес переводить на char.
wchar_t в адресе, принимать не желает...
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 12:44

И так тоже не желает....
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 12:51
COKPOWEHEU,


Ваше творчество он вот так видел...
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
30.07.2023, 14:16
Цитата Сообщение от Наталья8 Посмотреть сообщение
Это в GNU проектах всё так. visual studio всё нормально...
"В GNU проектах" ваши виндовые костыли вообще не требуются, там все просто работает.
Цитата Сообщение от Наталья8 Посмотреть сообщение
#pragma warning(disable : 4996)
Насколько я понимаю, эти варианты почти идентичны.
Цитата Сообщение от Наталья8 Посмотреть сообщение
C для начинающих
std::fstream file(name);
Мы в разделе по Си, а не по С++.
Цитата Сообщение от Наталья8 Посмотреть сообщение
wchar_t в адресе, принимать не желает...
Вот это хороший вопрос. Надо будет проверить. Возможно, хватит wcstomb, но кто их, майкрософтов, знает.
Цитата Сообщение от Наталья8 Посмотреть сообщение
Ваше творчество он вот так видел...
Еще раз. Я не говорю, что мой вариант идеален. Но это лучшее решение, которое мне удалось найти. Если сумеете придумать лучше - буду рекламировать ваше решение. Разумеется, антиквариат с cp1251 решением не является.

Добавлено через 8 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вот это хороший вопрос. Надо будет проверить. Возможно, хватит wcstomb, но кто их, майкрософтов, знает.
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
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <stdlib.h>
 
#ifdef WIN32 //специальные костыли для виндовой консоли
  #pragma warning(disable : 4996)
  #define _CRT_SECURE_NO_WARNINGS
  #include <windows.h>
  #include "fcntl.h"
  __attribute__((constructor)) void coninit(){
    SetConsoleCP(CP_UTF8); SetConsoleOutputCP(CP_UTF8);
    _setmode(_fileno(stdout), _O_U8TEXT);
    _setmode(_fileno(stdin), _O_U16TEXT);
  }
#endif
 
int main(){
  setlocale(LC_ALL, "");
  wchar_t filename[100] = L"файл.txt";
  char filename_mbs[200];
  wcstombs(filename_mbs, filename, sizeof(filename_mbs));
  FILE *pf = fopen(filename_mbs, "wt");
  if(pf == NULL){
    fwprintf(stderr, L"Can not create file [%ls]\n", filename);
    return 0;
  }
  fwprintf(pf, L"%ls\n%s\n", filename, filename_mbs);
  fclose(pf);
}
Code
1
2
3
4
5
6
$ gcc main.c
$ ./a.out 
$ cat файл.txt 
файл.txt
файл.txt
$
Да, через wcstombs все работает (на win10 тоже проверил). Возможно, есть способ и проще, но меня его поиск сейчас не интересует.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
30.07.2023, 15:26
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Такое ощущение, что у вас кодировка исходника какая-то странная.
UTF8, что в ней странного?

Грешил на старую необновляемую винду и такую же студию (я на том компе виндой особо не пользуюсь), но нет. На рабочем компе, где и винда обновлённая, и мелкостудия вот только-что обновилась, получилось ещё смешнее
Code
1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\andrew\prog\c\strings>clang -Wall -o rus_clang.exe rus.c
 
C:\Users\andrew\prog\c\strings>rus_clang.exe
Проверка ввода текста в консоли. Введите текст: йцукен
[c] = 0x  A9
[ж] = 0x 436
[г] = 0x 433
[Є] = 0x 404
[?] = 0x 490
[-] = 0x  AD
 
C:\Users\andrew\prog\c\strings>
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\Users\andrew\prog\c\strings>cl rus.c
Оптимизирующий компилятор Microsoft (R) C/C++ версии 19.36.32537 для x86
(C) Корпорация Майкрософт (Microsoft Corporation).  Все права защищены.
 
rus.c
Microsoft (R) Incremental Linker Version 14.36.32537.0
Copyright (C) Microsoft Corporation.  All rights reserved.
 
/out:rus.exe
rus.obj
 
C:\Users\andrew\prog\c\strings>rus
Р?С?Р?Р?РчС?РєР° Р?Р?Р?Р?Р° С'РчРєС?С'Р° Р? РєР?Р?С?Р?Р>Рё. Р'Р?РчР?РёС'Рч С'РчРєС?С': йцукен
[c] = 0x  A9
[ж] = 0x 436
[г] = 0x 433
[Є] = 0x 404
[?] = 0x 490
[-] = 0x  AD
 
C:\Users\andrew\prog\c\strings>

А gcc в той же консоли с тем же файлом:
Code
1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\andrew\prog\c\strings>gcc -Wall -o rus_gcc.exe rus.c
 
C:\Users\andrew\prog\c\strings>rus_gcc.exe
Проверка ввода текста в консоли. Введите текст: йцукен
[й] = 0x 439
[ц] = 0x 446
[у] = 0x 443
[к] = 0x 43A
[е] = 0x 435
[н] = 0x 43D
 
C:\Users\andrew\prog\c\strings>
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 16:00
Цитата Сообщение от easybudda Посмотреть сообщение
Р?С?Р?Р?РчС?РєР° Р?Р?Р?Р?Р° С'РчРє
Это UTF8.

Добавлено через 4 минуты
Консоль виндовс наверное юникоды не выводит.
Я недавно немножко занимался перекодированием.
C++
1
2
3
4
5
6
7
8
 if (!ansi_or_utf_8(cut_ptr, one))// Вызываем функцию опознать строку с символами UTF-8
                    MultiByteToWideChar(CP_ACP, 0, cut_ptr, slength, buf_ptr, len);
                else{
                    // Если строка содержит символы UTF-8, то перекодирует строку
                    std::wstring_convert<std::codecvt_utf8<wchar_t>> wconv;
                    std::wstring wstr = wconv.from_bytes(cut_ptr);
                    wcscpy(buf_ptr, wstr.c_str());
                    }
Как то так...
Идея была, с текста выписать адреса, с комментариями.
Адреса, они и есть адреса, а русские комментарии, в UTF8 - они вот такие. Двухбайтовые...

Добавлено через 3 минуты
Строка char содержит, или ansii, или UTF8...
Кстати CodeBlocks , этого преобразования, тоже знать не желает.
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 16:08

Самая пользуемая моя программа.
Компьютер включаю, сразу её запускаю.
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 16:11
Цитата Сообщение от Наталья8 Посмотреть сообщение
Р?С?Р?Р?Рч
Это если UTF8 пустить как строку char.
0
 Аватар для Наталья8
625 / 383 / 67
Регистрация: 09.03.2016
Сообщений: 4,292
30.07.2023, 16:16
Тренировка.... Такое исследование... С мусором извиняюсь. Надоело всё...

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
#include <string>
#include <codecvt>
#include <locale>
#include<vector>
using namespace std;
 
 
 
 
// ANSI - большая А = 192; Маленькая я = 255;
// UTF - 8 на сороквосемь меньше... Между буквами код 208(в ANSI большая Я)прибавить 48;
// UTF - 8 если перед буквой код 209(большая С), то надо к следующему коду прибавить 112;
 
// https://stackoverflow.com/questions/17562736/how-to-convert-from-utf-8-to-ansi-using-standard-c
wstring utf8_to_string(const char *utf8str, const locale& loc)
{
    // UTF-8 to wstring
    wstring_convert<codecvt_utf8<wchar_t>> wconv;
    wstring wstr = wconv.from_bytes(utf8str);
    // wstring to string
    //vector<char> buf(wstr.size());
    //use_facet<ctype<wchar_t>>(loc).narrow(wstr.data(), wstr.data() + wstr.size(), '?', buf.data());
    //return string(buf.data(), buf.size());32 236 229 237 252 248 229 46 46 46 32 204 229 230 228 243
 
    return wstr;
}
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "RUSSIAN");
    wstring ansi;
    char utf8txt[] = {208,161,208,191,208,184,208,180,208,190,208,188,208,181,209,130,209,128,0};
    //char utf8txt[] = {32,236,229,237,252,248,229,46,46,46,32,204,229,230,228,243,0};
    // Русские ANSI не проходят. Вешает
    printf("%s\n", utf8txt);
    // I guess you want to use Windows-1252 encoding...
    ansi = utf8_to_string(utf8txt, locale(".1252"));
    // Now do something with the string
    wprintf(L"%s", ansi.c_str());
 
    getchar();
    return 0;
}
Название: NewPicture9 (2).png
Просмотров: 102

Размер: 10.7 Кб
0
30.07.2023, 16:18

Не по теме:

Цитата Сообщение от Наталья8 Посмотреть сообщение
Самая пользуемая моя программа.
Закладки в броузере? Не, не слышал. ;)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2023, 16:18

Ввод данных с клавиатуры в одномерный массив
Здравствуйте. У нас есть массив из 16 элементов, с клавиатуры вводятся 16 различных цифр подряд (1234567890675923) после того как мы ввели...

Ввод с клавиатуры данных в массив, состоящий из 10 структур типа STUDENT
Помогите пожалуйста. Выдает в строке NAME: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM а потом имя. Как убрать буквы M? #include...

Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN
помогите пожалуйста, не получается сделать,туго с динамикой. • Описать структуру с именем TRAIN, содержащую следующие поля: • название...

Ввод с клавиатуры данных в массив, состоящий из восьми элементов заданного типа
Вариант 16 Описать структуру с именем ZNAK, содержащую следующие поля: • фамилия, имя; • знак Зодиака; • дата рождения (массив...

Сформировать одномерный массив целых чисел, используя ввод данных с клавиатуры
Найти в массиве наибольшее число подряд идущих одинаковых элементов (например {1,5,3,6,6,6,6,6,3,4,4,5,5,5} = 5). Заранее большое спасибо.


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru