Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 57
1

Ввод и вывод в файл на русском языке

06.06.2017, 07:10. Просмотров 928. Ответов 6
Метки нет (Все метки)

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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <time.h>
#include <io.h>
 
using namespace std;
 
struct TZap{
    char FIO[50];
    int year;
    char group[10];
    int ball [10];
    double avg;
}Zap;
 
int size = sizeof(TZap);
FILE *Fz, *Ft;
char File_Rez[] = "rezult.txt";
void Out(TZap);
 
void create(){
    if ((Fz=fopen(File_Rez,"wt"))==NULL) {
        cout<<"\n Ошибка создания файла."<<endl;
    return;
    }
    fclose(Fz);
    cout<<"\n Файл создан."<<endl;
}
 
void in(){
    Fz = fopen(File_Rez,"at");
    rewind(stdin);
    cout<<"Введите ФИО:\n";
    gets(Zap.FIO);
    cout<<"Введите год рождения:\n";
    cin>>Zap.year;
    cout<<"Введите номер группы:\n";
    cin>>Zap.group;
    cout<<"Введите оценки по физике, математике, информатике и химии через пробел:\n";
    cin>>Zap.ball[0]>>Zap.ball[1]>>Zap.ball[2]>>Zap.ball[3];
    Zap.avg = (Zap.ball[0]+Zap.ball[1]+Zap.ball[2]+Zap.ball[3])/4.0;
    fwrite(&Zap, size, 1, Fz);
    fclose(Fz);
}
 
void out (){
    cout<<"\n"<<"\tФИО - "<<Zap.FIO;
    cout<<"\n"<<"\tГод рождения - "<<Zap.year;
    cout<<"\n"<<"\tНомер группы - "<<Zap.group;
    cout<<"\n"<<"\tОценка по физике - "<<Zap.ball[0];
    cout<<"\n"<<"\tОценка по математике - "<<Zap.ball[1];
    cout<<"\n"<<"\tОценка по химии - "<<Zap.ball[2];
    cout<<"\n"<<"\tОценка по физике - "<<Zap.ball[3];
    cout<<"\n"<<"\tСредний балл - "<<Zap.avg<<"\n";
}
 
void zadanie(){
    Fz = fopen(File_Rez,"r");
    while (fread(&Zap,size,1,Fz)){
        if((Zap.ball[0] == 4) || (Zap.ball[0] == 5) || (Zap.ball[1] > 8) || (Zap.ball[2] > 8) || (Zap.ball[3] > 8))
        out();
    } fclose(Fz);
}
 
void main(){
 
    setlocale (LC_ALL, "Russian");
 
    int kod;
    Ft = fopen(File_Rez, "w");
    do {
        cout<<"\n [1] - Создание.\n [2] - Корректировка.\n [3] - Просмотр.\n [4] - Решение задания.\n [0] - Выход.\n";
        cout<<"\n";
        scanf("%d", &kod);
        switch(kod) {
            case 1:
                create ();
            break;
            case 2:
                in ();
            break;
            case 3:
                if ((Fz=fopen(File_Rez,"rt"))==NULL) {
                    cout<<"\n Ошибка открытия файла."<<endl;
                    return;
                }
                printf("\n\t--------- Информация ---------\n");
                while(1) {
                    if(!fread(&Zap,size,1,Fz)) break;
                    out();
                }
                fclose(Fz);
            break;
            case 4:
                zadanie();  
            break;
            case 0:
                fclose(Ft);
                return; 
        }
    } while (kod != 0);
}
Ввожу текстовую информацию английскими буквами все хорошо, пишу по русски выдает бракозябру. Посоветуйте как исправить.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2017, 07:10
Ответы с готовыми решениями:

Ввод и вывод строк на русском языке (кирилице)
Здравствуйте уважаемые форумчани! При решении упражнения возникла следующая проблема, необходимо...

Как реализовать ввод/вывод текста на русском языке?
Вечер добрый, друзья. Вот только что зарегистрировался, т.к. уже нет сил бороться с одной...

Вывод в файл на русском языке
Добрый день!!! Ребят, проконсультируйте, пожалуйста) Программа, которая записывает текст в файл...

Ввод на русском языке
Как сделать чтоб в джаве ввод можно делать на ру

6
Модератор
Эксперт С++
9933 / 8449 / 5137
Регистрация: 18.12.2011
Сообщений: 22,643
06.06.2017, 07:44 2
1. По существу вопроса
C++
1
2
3
4
5
#include <windows.h>
...
 cout<<"Введите ФИО:\n";
 cin.getline(Zap.FIO);
 OemToChar(FIO,FIO);
2. Что за дикая смесь scanf и cin>> ??????
Почему Вы считаете, что буфер Сишного ввода и istream ввода один и тот же?

3. Не оставляйте символ \n в потоке после ввода чисел, т.е.
C++
1
2
3
4
cout<<"\n [1] - Создание.\n [2] - Корректировка.\n [3] - Просмотр.\n [4] - Решение задания.\n [0] - Выход.\n";
cout<<"\n";
cin>>kod;
cin.get(); // убрали \n
Иначе при последующем чтении строки (cin.getline(Zap.FIO) она окажется пустой.

Аналогично
C++
1
2
3
cout<<"Введите оценки по физике, математике, информатике и химии через пробел:\n";
    cin>>Zap.ball[0]>>Zap.ball[1]>>Zap.ball[2]>>Zap.ball[3];
    cin.get();
1
0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 57
06.06.2017, 10:59  [ТС] 3
1. OemToChar(FIO,FIO) - error C2065: FIO: не объявленный идентификатор. Ругается на выделенный участок. За наводку спасибо буду копать.

2. Такая дикая смесь получилась потому что сроки поджимают сильно(контрольную надо сдать в институт). Неделю пытаюсь решить эту задачу, ничего не выходит. Слепил из того что было. Надо сдать а потом спокойно сесть и разобраться.

3. Спасибо за подсказку, учту
0
899 / 605 / 286
Регистрация: 26.02.2015
Сообщений: 2,761
06.06.2017, 11:07 4
1. Так внимательно посмотрите, что за FIO и где оно используется у Вас в программе... а не просто копируйте. Это поле стрктуры.
0
0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 57
06.06.2017, 11:14  [ТС] 5
Я знаю что такое FIO и где оно в программе, я разбирался когда писал, хоть и кажется сумбуром для опытного человека, а я пока учусь.
0
Модератор
Эксперт С++
9933 / 8449 / 5137
Регистрация: 18.12.2011
Сообщений: 22,643
06.06.2017, 12:18 6
barabaha789, надеюсь Вы догадались, что, введенный текст надо перекодировать в 1251 кодировку,
для этого надо
C++
1
2
cin.getline(Zap.FIO);
 OemToChar(Zap.FIO,Zap.FIO);
0
nd2
3400 / 2782 / 1250
Регистрация: 29.01.2016
Сообщений: 9,423
06.06.2017, 16:31 7
Цитата Сообщение от barabaha789 Посмотреть сообщение
пишу по русски выдает бракозябру. Посоветуйте как исправить.
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console.
Установка шрифта Lucida Console
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2017, 16:31

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

Ввод предложения на русском языке
Люди помогите разобраться, как ввести через консоль предложение на русском языке ?

Ввод ФИО только на русском языке
Организовать ввод ФИО только на русском языке.

Ввод адреса электронной почты на русском языке
Всем добрый день! Подскажите, пожалуйста есть на главной странице сайта электронный адрес....

Как организовать ввод данных на русском языке?
Помогите решить проблему, программа не хочет воспринимать русский язык,хотя setlocale(LC_ALL,...


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

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

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