С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 3
Регистрация: 25.12.2014
Сообщений: 258
1

Вылетает программа

18.04.2016, 13:27. Показов 1542. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Выкидывает после того как вводишь название файла где лежит список студентов группы, в котором указаны фамилия, имя, отчество, день, число и месяц рождения. Мне надо организовать выборки по месяцу и году рождения. Имя файла где лежит список студентов группы, в котором указаны фамилия, имя, отчество, день, число и месяц рождения. вводить с клавиатуры в процессе работы программы.

Вот что у меня получилось:

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
#include <string>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
 
struct student //определение нового типа
{
    char name[15];
    struct      // вложенная структура (запись)
        {
            unsigned  den, mes;
            unsigned  int god;
        } denRogd;
};
void main()
    {
        setlocale(LC_ALL, "RUS");
        struct student z[20];
        unsigned short g, i, n, m;   // g- год, m-месяц
        system("cls");             // очистка экрана
        FILE * f;
        printf("Введите название файла студента: \n");
        char  file[255];
        gets_s(file);
        f = fopen(file, "r");
        printf("Введите месяц и год рождения для поиска\n");
        scanf_s("%u", &g, &m);
        printf(" Список\n");
        for (i = 0; i<n; i++)
            {
                if (z[i].denRogd.god == g)
                    {
                        printf("Имя студента\n");
                        printf("%s\n", z[i].name);
                        printf("Дата рождения - \n");
                        printf("%u ", z[i].denRogd.den);
                        printf("%u ", z[i].denRogd.mes);
                        printf("%d", z[i].denRogd.god);
                        printf("\n");
                    }
            }
        _getch();
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2016, 13:27
Ответы с готовыми решениями:

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

Вылетает программа
Доброго времени суток, форумчане! Можете объяснить, почему вылетает программа, не выдавая...

Вылетает программа
вылетает при нахождении у0 и дальше не идет void func(double y0, double y1, double y2, double...

Программа вылетает
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; double f(double x){ return...

15
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
18.04.2016, 13:58 2
Функции с _s не используй. Должно быть gets_s(file, 255). Проверяй, что файл открылся. И где вообще чтение из файла?
0
2 / 2 / 3
Регистрация: 25.12.2014
Сообщений: 258
18.04.2016, 14:17  [ТС] 3
Вот подключил чтение, но жалуется на foper. Что не так?

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
#include <string>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
 
struct student //определение нового типа
{
    char name[15];
    struct      // вложенная структура (запись)
        {
            unsigned  den, mes;
            unsigned  int god;
        } denRogd;
};
void main()
    {
        setlocale(LC_ALL, "RUS");
        struct student z[20];
        unsigned short g, i, n;   // g- год
        system("cls");             // очистка экрана
        FILE *f;                                             //  f – файловая переменная
        if ((f = fopen("input", "r")) == NULL)
            {
                puts("Не могу открыть файл\n");        // печать строки
                exit(1);
            }
        puts("Файл открыт\n");
        printf("Введите название файла студента: \n");
        char  file[255];
        gets_s(file, 255);
        f = fopen(file, "r");
        printf("Введите месяц и год рождения для поиска\n");
        scanf_s("%u", &g);
        printf(" Список\n");
        for (i = 0; i++;)
            {
                if (z[i].denRogd.god == g)
                    {
                        printf("Имя студента\n");
                        printf("%s\n", z[i].name);
                        printf("Дата рождения - \n");
                        printf("%u ", z[i].denRogd.den);
                        printf("%u ", z[i].denRogd.mes);
                        printf("%d", z[i].denRogd.god);
                        printf("\n");
                    }
            }
        system("pause");
    }
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
18.04.2016, 14:35 4
MegaRoks, майкрософт считает ее небезопасной, предлагает использовать fopen_s с почти таким же синтаксисом.
1
2 / 2 / 3
Регистрация: 25.12.2014
Сообщений: 258
18.04.2016, 14:50  [ТС] 5
Babysitter, Пишет функция не принимает 2 аргументов. Что не так?
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
18.04.2016, 14:56 6
MegaRoks, потому что она принимает три. по ссылке бы сходил.

C++
1
2
3
4
5
errno_t fopen_s( 
   FILE** pFile,
   const char *filename,
   const char *mode 
);
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
#include <stdio.h>
 
FILE *stream, *stream2;
 
int main( void )
{
   int numclosed;
   errno_t err;
 
   // Open for read (will fail if file "crt_fopen_s.c" does not exist)
   if( (err  = fopen_s( &stream, "crt_fopen_s.c", "r" )) !=0 )
      printf( "The file 'crt_fopen_s.c' was not opened\n" );
   else
      printf( "The file 'crt_fopen_s.c' was opened\n" );
 
   // Open for write 
   if( (err = fopen_s( &stream2, "data2", "w+" )) != 0 )
      printf( "The file 'data2' was not opened\n" );
   else
      printf( "The file 'data2' was opened\n" );
 
   // Close stream if it is not NULL 
   if( stream)
   {
      if ( fclose( stream ) )
      {
         printf( "The file 'crt_fopen_s.c' was not closed\n" );
      }
   }
 
   // All other files are closed:
   numclosed = _fcloseall( );
   printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}
1
2 / 2 / 3
Регистрация: 25.12.2014
Сообщений: 258
18.04.2016, 15:02  [ТС] 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
#include <string>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
 
errno_t fopen_s(
    FILE** pFile,
    const char *filename,
    const char *mode
);
 
struct student //определение нового типа
{
    char name[15];
    struct      // вложенная структура (запись)
        {
            unsigned  den, mes;
            unsigned  int god;
        } denRogd;
};
void main()
    {
        setlocale(LC_ALL, "RUS");
        struct student z[20];
        unsigned short g, i, n;   // g- год
        system("cls");             // очистка экрана
        FILE *f;                                             //  f – файловая переменная
        if ((f = fopen_s(&f, "input", "r")) == NULL)
            {
                puts("Не могу открыть файл\n");        // печать строки
                exit(1);
            }
        puts("Файл открыт\n");
        printf("Введите название файла студента: \n");
        char  file[255];
        gets_s(file, 255);
        f = fopen_s(&f, "file", "r");
        printf("Введите месяц и год рождения для поиска\n");
        scanf_s("%u", &g);
        printf(" Список\n");
        for (i = 0; i++;)
            {
                if (z[i].denRogd.god == g)
                    {
                        printf("Имя студента\n");
                        printf("%s\n", z[i].name);
                        printf("Дата рождения - \n");
                        printf("%u ", z[i].denRogd.den);
                        printf("%u ", z[i].denRogd.mes);
                        printf("%d", z[i].denRogd.god);
                        printf("\n");
                    }
            }
        system("pause");
    }
Ошибка C2440 =: невозможно преобразовать "errno_t" в "FILE *"
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
18.04.2016, 15:08 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
#include <string>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <locale.h>
 
struct student //определение нового типа
{
    char name[15];
    struct      // вложенная структура (запись)
    {
        unsigned  den, mes;
        unsigned  int god;
    } denRogd;
};
 
void main()
{
    setlocale(LC_ALL, "RUS");
    struct student z[20];
    unsigned short g, i, n;   // g- год
    system("cls");             // очистка экрана
    FILE* f;                                             //  f – файловая переменная
    if (fopen_s(&f, "input", "r") == NULL)
    {
        puts("Не могу открыть файл\n");         // печать строки
        exit(1);
    }
    puts("Файл открыт\n");
    printf("Введите название файла студента: \n");
    char  file[255];
    gets_s(file, 255);
    fopen_s(&f, file, "r");
    printf("Введите месяц и год рождения для поиска\n");
    scanf_s("%u", &g);
    printf(" Список\n");
    for (i = 0; i++;)
    {
        if (z[i].denRogd.god == g)
        {
            printf("Имя студента\n");
            printf("%s\n", z[i].name);
            printf("Дата рождения - \n");
            printf("%u ", z[i].denRogd.den);
            printf("%u ", z[i].denRogd.mes);
            printf("%d", z[i].denRogd.god);
            printf("\n");
        }
    }
    system("pause");
}
Добавлено через 1 минуту
так, и еще for у вас поехал, а я скопипастил.
C++
1
for (i = 0; i++;)
Добавлено через 2 минуты
и еще я кода самого считывания из файла не вижу.
0
2 / 2 / 3
Регистрация: 25.12.2014
Сообщений: 258
18.04.2016, 15:13  [ТС] 9
Babysitter, Вставил Ваш кода, работает. Но конце программы выдает ошибку. Что она значит? катинка
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,706
18.04.2016, 15:17 10
Чтение из файла добавь, у тебя строки не инициализированы.
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
18.04.2016, 15:18 11
MegaRoks, это не мой код же, он падает, это нормально. покажи конкретно мне пример данных, которые ты вводишь в консоль и файл, с которого должно происходить считываение, я поправлю.
0
2 / 2 / 3
Регистрация: 25.12.2014
Сообщений: 258
18.04.2016, 15:25  [ТС] 12
Babysitter, Программа вот, там есть Проект1\Проект1\input.txt файл в нем лежит список студентов группы, в котором указаны фамилия, имя, отчество, день, число и месяц рождения. При запуске консоль мне пишет, "Введите название файла студента", я ввожу "input", он пишет файл открыт. Потом надо указать год и месяц рождения и должен появиться список студентов у которых совпал год и месяц, но он не появляется и потом сразу ошибку которую я указал выше.
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
18.04.2016, 15:36 13
MegaRoks, в файле идет сначала имя, потом фамилия отдельно. в структуре под имя выделено одно поле длиной всего 15 символов, ты планируешь, что имя будет приклеено к фамилии и будет храниться там?
0
2 / 2 / 3
Регистрация: 25.12.2014
Сообщений: 258
18.04.2016, 15:38  [ТС] 14
Babysitter, Да, так как мне не зачем использовать по отдельности имя и фамилия.
0
245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
18.04.2016, 16:47 15
Лучший ответ Сообщение было отмечено MegaRoks как решение

Решение

MegaRoks, я вообще с таким стилем советую идти на форум сишников и там дурить голову.
вот в общих чертах как это может выглядеть в твоем си-стиле.
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
#include <string>
#include <stdio.h>
#include <locale.h>
 
#define COUNT 20
#define NAME_SIZE 15
 
struct student //определение нового типа
{
    char name[NAME_SIZE];
    struct      // вложенная структура (запись)
    {
        unsigned  den, mes;
        unsigned  int god;
    } denRogd;
};
 
int main()
{
    setlocale(LC_ALL, "RUS");
    struct student z[COUNT];
    char buffer[10];
    unsigned short g, i, n, count;     // g- год
    g = i = n = count = 0;
    system("cls");              // очистка экрана
    // имя файла для ввода
    printf("Введите название файла студента: \n");
    char file[256];
    gets_s(file, 256);
    FILE* f;                    //  f – файловая переменная
    if (fopen_s(&f, file, "r") != 0)
    {
        puts("Не могу открыть файл\n");         // печать строки
        exit(1);
    }
    puts("Файл открыт\n");
 
    for (; fgets(z[i].name, NAME_SIZE, f); ++i)
    {
        char* end = strchr(z[i].name, '\n');
        *end = ' '; ++end;
        if (!fgets(end, NAME_SIZE - (end - z[i].name), f))    // фамилия
            goto READ_ERROR;
        end = strchr(z[i].name, '\n');
        *end = '\0';
 
        if (!fgets(buffer, 10, f))    // день
            goto READ_ERROR;
        sscanf_s(buffer, "%d", &z[i].denRogd.den);
        if (!fgets(buffer, 10, f))    // месяц
            goto READ_ERROR;
        sscanf_s(buffer, "%d", &z[i].denRogd.mes);
        if (!fgets(buffer, 10, f))    // год
            goto READ_ERROR;
        sscanf_s(buffer, "%d", &z[i].denRogd.god);
    }
    count = i;
 
    printf("Введите год рождения для поиска\n");
    gets_s(buffer, 10);    // год для поиска
    sscanf_s(buffer, "%hd", &g);
    printf(" Список\n");
    for (i = 0; i < count; ++i)
    {
        if (z[i].denRogd.god == g)
        {
            printf("Имя студента\n");
            printf("%s\n", z[i].name);
            printf("Дата рождения - \n");
            printf("%u ", z[i].denRogd.den);
            printf("%u ", z[i].denRogd.mes);
            printf("%d", z[i].denRogd.god);
            printf("\n");
        }
    }
    system("pause");
    return 0;
 
READ_ERROR:
    puts("Ошибка чтения\n");
    exit(1);
}
1
2 / 2 / 3
Регистрация: 25.12.2014
Сообщений: 258
18.04.2016, 17:06  [ТС] 16
Babysitter, Спасибо за помощь
0
18.04.2016, 17:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2016, 17:06
Помогаю со студенческими работами здесь

Вылетает программа
Почему программа вылетает после ввода размерностей:(Исправьте пожалуйста #include &lt;cstdlib&gt;...

Программа вылетает
Borland C++3.1 консольное приложение При определенных данных программа вылетает. Что это...

Вылетает программа
#include &lt;iostream&gt; #include &lt;string&gt; #include &quot;students.h&quot; int *schetchik = new int(1); bool...

Вылетает программа
Работаю в dev-c++ программа компилируется нормально, как только запускаю вылетает. Помогите...

Вылетает программа
Вот что пишет: вот код: /*С клавиатуры вводятся две строки, содержащие некоторые слова,...

Вылетает программа
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; struct game2048 { int ar; ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru