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

Структуры - C++

Восстановить пароль Регистрация
 
Xensis
5 / 5 / 0
Регистрация: 15.07.2010
Сообщений: 57
23.07.2010, 13:42     Структуры #1
Проблема при выводе на экран за место тех чисел которые вводил выводит 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
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#define n 1
#define stp ""
using namespace std;
 
struct tab
    {
        char fam[10];
        char im[10];
        char ot[10];
        char pol[10];
        char vozr[10];
        char kyp[5];
    };
 
void main()
{   
    setlocale(LC_ALL, "Russian");
 
    int k;
    struct tab wed[n];
    int proc(int a,struct tab wed[], int&, int k);
    int i=0,j,f;
    
    printf("Введите фамилию:\n");
    while(strcmp(gets(wed[i].fam),stp)!=0 && i<n)
    {
        printf("Введите Имя:\n");
        gets(wed[i].im);
        
        printf("Введите Отчество:\n");
        gets(wed[i].ot);
        
        printf("Введите пол:\n");
        gets(wed[i].pol);
        
        printf("Введите возраст:\n");
        scanf("%d",&wed[i].vozr);
    
        printf("Введите Курс:\n");
        scanf("%d",wed[i].kyp);
    
    while (getchar()!='\n'); 
        if(i<n-1)
        {   printf("Введите следующую Фамилию");
            printf("\n");
        }
            i++;
    }
 
    k=i;
    printf ("k=%d",k);
    printf("\n");
    for(j=0;j<k;j++)
        printf("%s %s %s %s %d %d",wed[j].fam,wed[j].im,wed[j].ot,wed[j].pol,wed[j].vozr,wed[j].kyp);
        printf("\n");
        printf("\n");
 
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2010, 13:42     Структуры
Посмотрите здесь:

Структуры. Работа с файлами, содержащими структуры C++
Исследование структуры FILE или: что вообще можно выудить из этой структуры, указатель на которую мы получаем при открытии файла? C++
Структуры. Вызов данных структуры по указателю. с++ C++
Отличаи класса С++ от структуры на С и структуры на С++ C++
C++ Понятие структуры данных. Элементарные структуры данных. Простые структуры данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Qwerty_coder
29 / 29 / 2
Регистрация: 14.12.2009
Сообщений: 79
23.07.2010, 14:05     Структуры #2
Xensis, если выводятся крокозябры вместо русского, то кури этот топик:
http://www.cyberforum.ru/visual-cpp/...read61113.html
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.07.2010, 14:07     Структуры #3
Цитата Сообщение от Xensis Посмотреть сообщение
и не выводит на русском
Русские шрифты в консоли
Цитата Сообщение от Xensis Посмотреть сообщение
выводит 6 значиные
скорее всего выход за пределы массива
Xensis
5 / 5 / 0
Регистрация: 15.07.2010
Сообщений: 57
23.07.2010, 14:17  [ТС]     Структуры #4
Цитата Сообщение от Qwerty_coder Посмотреть сообщение
Xensis, если выводятся крокозябры вместо русского, то кури этот топик:
http://www.cyberforum.ru/visual-cpp/...read61113.html
Пробовал все не одно не помогло кроме как при вводе только русский язык имеется а при обработке он его не понимает. Не в курсе как кодировку изменить?? дуаю в этом проблема.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
23.07.2010, 15:55     Структуры #5
Тебе уже сказали как:
Устанавливаешь для консоли кодовую страницу 1251 (Windows):
  1. Подключаешь <windows.h>
  2. В начале функции main пишешь:
    C++
    1
    2
    
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
  3. Запускаешь скомпилированную программу
  4. В настройках консоли выбираешь шрифт Lucida Console
  5. Сохраняешь настройки
Если сделал все правильно, то кракозябров не будет
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
23.07.2010, 16:06     Структуры #6
Вот примерная последовательность действий:
Структуры
Xensis
5 / 5 / 0
Регистрация: 15.07.2010
Сообщений: 57
27.07.2010, 11:05  [ТС]     Структуры #7
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
#include <windows.h>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#define n 2
#define stp ""
using namespace std;
 
struct tab
    {
        char fam[10];
        char im[10];
        char ot[10];
        char pol[10];
    int kyp,vozr;
    };
 
void main()
{   
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int k;
    struct tab wed[n];
    int proc(int a,struct tab wed[], int&, int k);
    int i=0,j,f;
    
    printf("Введите фамилию:\n");
    while(strcmp(gets(wed[i].fam),stp)!=0 && i<n)
    {
        printf("Введите Имя:\n");
        gets(wed[i].im);
        
        printf("Введите Отчество:\n");
        gets(wed[i].ot);
        
        printf("Введите пол:\n");
        gets(wed[i].pol);
        
        printf("Введите возраст:\n");
        scanf("%d",&wed[i].vozr);
    
        printf("Введите Курс:\n");
        scanf("%d",&wed[i].kyp);
    
    while (getchar()!='\n'); 
        if(i<n-1)
        {   printf("Введите следующую Фамилию");
            printf("\n");
        }
            i++;
    }
 
    k=i;
    for(j=0;j<k;j++)
    {
        printf("%s %s %s %s %d %d\n",wed[j].fam,wed[j].im,wed[j].ot,wed[j].pol,wed[j].vozr,wed[j].kyp);
    }
        
    
        for (j=0;j<k;j++)
        {
            f=proc(j,wed,i,k);
            if(f)
            {
                puts("Студенты мужского пола:\n");
                printf("%s",wed[i].pol);break;
            }
        }
            if(!f) puts("Таких нет!\n");
            
 
    int proc (int a,struct tab wed[],int&i,int k)
    {
 
        for (i=a+1;i<k;i++)
            if(strcmp(wed[a].pol==wed[i].pol))
 
            {
                return 1;
                break;
            }
    }           
getch();
}

Подскажите как поправить чтобы выводил только студентов мужского пола, заранее спасибо...
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
27.07.2010, 12:02     Структуры #8
Как-то у тебя все криво... Вот написал по-своему:
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
#include <iostream>
#include <string>
#include <windows.h>
#include <iomanip>
 
struct tab
{
    std::string firstName; //Фамилия
    std::string secondName; //Имя
    std::string thirdName; //Отчество
    /* ИМХО, пол лучше сделать логическим типом
       true - мужской, false - женский (или наоборот, для феминисток ;) ) */
    bool        gender;
    size_t      age; //Возраст
    size_t      course; //Курс
};
 
template<class T>
void get(const char* msg, T& var)
{
    std::cout << msg << ": ";
    std::cin >> var;
}
 
bool error(const char* msg)
{
    std::cout << "Ошибка: " << msg;
    std::cout << "; повторите попытку ввода еще раз..." << std::endl;
    return true;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    size_t cnt;
    get("Введите число студентов", cnt);
    tab* pt = new tab [cnt];
    for(size_t i = 0; i < cnt; ++i)
    {
        std::cout << "-----------------------------------" << std::endl;
        get("Введите фамилию", pt[i].firstName);
        get("Введите имя", pt[i].secondName);
        get("Введите отчество", pt[i].thirdName);
        char ans;
        do
        {
            get("Введите пол [m -мужской, f - женский]", ans);
            ans = tolower(ans);
        }
        while(((ans != 'm') && (ans != 'f') && error("пол введен неправильно")));
        pt[i].gender = ( ans == 'm');
        get("Введите возраст", pt[i].age);
        size_t crs; //Курс, может быть от 1 до 5
        do
        {
            get("Введите курс", crs);
        }
        while(((crs < 1) || (crs > 5)) && error("курс введен неправильно"));
        pt[i].course = crs;
    }
    std::cout << "-----------------------------------" << std::endl;
    std::cout << "Вывод студентов мужского пола:" << std::endl;
    std::cout << std::setiosflags(std::ios::left) << std::setw(20) << "Имя" 
        << std::setw(20) << "Фамилия" << std::setw(20) 
        << "Отчество" << std::setw(10) << "Возраст" << std::setw(9) << "Курс" << std::endl;
    for(size_t i = 0; i < cnt; ++i)
        if(pt[i].gender)
            std::cout << std::setiosflags(std::ios::left) << std::setw(20) << pt[i].firstName 
                << std::setw(20) << pt[i].secondName << std::setw(20) << pt[i].thirdName
                << std::setw(10) << pt[i].age << std::setw(9) << pt[i].course << std::endl;
    system("pause");
    delete[] pt;
    return EXIT_SUCCESS;
}
Xensis
5 / 5 / 0
Регистрация: 15.07.2010
Сообщений: 57
27.07.2010, 12:11  [ТС]     Структуры #9
Спасибо очень благодарен=)
q1q1
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 7
18.11.2010, 23:00     Структуры #10
можно поинтересоваться зачем здесь нужны классы, и можете объяснить функцию get
заранее спасибо
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.11.2010, 23:04     Структуры #11
q1q1, Классов тут и нет. Есть шаблонная функция get. Подается в функцию строка и переменная тип которой является ссылка на Т
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,390
19.11.2010, 04:03     Структуры #12
q1q1, а где тут ты увидел классы? У меня, как и у ТС, только структуры без методов.
Цитата Сообщение от q1q1 Посмотреть сообщение
и можете объяснить функцию get
Get - это функция, которая выполняет печать сообщения msg и чтения значения переменной var из стандартного потока ввода
q1q1
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 7
21.11.2010, 17:37     Структуры #13
Я "немного" переделал код , вот на такой
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
 #include "stdafx.h"
#include <iostream>
#include <string>
#include<locale>
#include <iomanip>
 
struct tab
{
        std::string firstName; //Фамилия
        std::string secondName; //Имя
        std::string thirdName;//Отчество
        
        size_t          month;
        size_t          god; //год
        size_t          day; //день
};
 
template <class T>
void get(const char* msg, T& var)
{
        std::cout << msg << ": ";
        std::cin >> var;
}
 
int main()
{
      setlocale(LC_ALL,"Russian");
 
        size_t cnt;
        get("Введите число студентов", cnt);
        tab* pt = new tab [cnt];
        for(size_t i = 0; i < cnt; ++i)
        {
                std::cout << "-----------------------------------" << std::endl;
                get("Введите фамилию", pt[i].firstName);
                get("Введите имя", pt[i].secondName);
                get("Введите отчество", pt[i].thirdName);
               
                int mont;
                //int third;
                
                    get("Введите месяц", mont);
                    if(mont==pt[i].month);//&&(third==pt[i].thirdName));
               
                    pt[i].month=mont;
                    //pt[i].thirdName=third;
                    scanf("%d",&mont);
                    //scanf("%s",&third);
                    
                    
                get("Введите Год", pt[i].god);
                get("Введите день", pt[i].day);
            for(size_t i = 0; i < cnt; ++i)
                if(pt[i].month) //&&(pt[i].thirdName)
        FILE *fOutput;
        char sOutput[]="1.txt";
            
            fOutput=fopen(sOutput,"w");
                if (!fOutput)
            {
            printf("Нет такого файла, создайте файл %s \n",sOutput);
                return 0;
            }
fprintf(fOutput,"%d %s",pt[i].month);//pt[i].thirdName;
        return(0);
}
мне надо вывести в отдельный файл фио тех кто родился в заданном месяце и с одинаковой фамилией.
Что-то не получается=) спасибо всем кто откликнется

Добавлено через 3 часа 15 минут
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
 
#include "stdafx.h"
#include <iostream>
#include <string>
#include<locale>
#include <iomanip>
 
struct tab
{
        std::string firstName; //Фамилия
        std::string secondName; //Имя
        std::string thirdName;//Отчество
        
        size_t          month;
        size_t          god; //год
        size_t          day; //день
};
 
template <class T>
void get(const char* msg, T& var)
{
        std::cout << msg << ": ";
        std::cin >> var;
}
 
int main()
{
      setlocale(LC_ALL,"Russian");
 
        size_t cnt;
        get("Введите число студентов", cnt);
        tab* pt = new tab [cnt];
        for(size_t i = 0; i < cnt; ++i)
        {
                std::cout << "-----------------------------------" << std::endl;
                get("Введите фамилию", pt[i].firstName);
                get("Введите имя", pt[i].secondName);
                get("Введите отчество", pt[i].thirdName);
         get("Введите месяц", mont);
                
                get("Введите Год", pt[i].god);
                get("Введите день", pt[i].day);
            for(size_t i = 0; i < cnt; ++i)
                       if((pt[i].month==1)
                
        FILE *fOutput;
        fOutput=fopen("c:\\1.txt","w");
            if(fOutput==NULL){
                               printf("oshibka");
                            return(1);
                                        }
return(0);
 
}
мне надо вывести в отдельный файл фио тех кто родился с одинаковой фамилией.
Что-то не получается=) спасибо всем кто откликнется[/QUOTE]

Добавлено через 2 часа 8 минут
спасибо всем, сделал
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2010, 17:39     Структуры
Еще ссылки по теме:

C++ Оператор if и структуры. Возвращение структуры из функции
Структуры, нумерация полей структуры C++
Вывод структуры, строка как элемент структуры C++

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

Или воспользуйтесь поиском по форуму:
Nameless One
21.11.2010, 17:39     Структуры
  #14

Не по теме:

Вот это я понимаю: сам задал вопрос, сам и решил

Yandex
Объявления
21.11.2010, 17:39     Структуры
Ответ Создать тему
Опции темы

Текущее время: 21:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru