Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / [C] Информация о студенте из файла, вывод другой информации в файл / 5 сообщений из 5, страница 1 из 1
28.05.2017, 13:43
    #39461034
Elaysa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[C] Информация о студенте из файла, вывод другой информации в файл
[СИ]
Помогите пожалуйста найти ошибку, что уже только не перепробовала, не могу найти
После ввода группы пишет, что поврежден стек вокруг переменной "inst"
Тип группы должен быть char

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

Код: plaintext
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 "stdafx.h"
#include 
#include 
#define size 100

typedef struct
{
    char famly[20];
    char fName[20];
    char sName[20];
    char univer[20];
    char group[20];
} Student;

void find(FILE *fo, Student *stud, char *gr, char *inst, int n)
{
    for (int i = 0; i < n; i++)
        if ((stud[i].group == gr) && (strcmp(stud[i].univer, inst) == 0))
        {
            printf("%s %s %s %s %s\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, stud[i].group);
            fprintf(fo, "%s %s %s %s %s\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, stud[i].group);
        }
}

int main()
{
    setlocale(LC_ALL, "Russian");   
    int n = 0;
    int i = 0;
    char inst;
    char gr;

    Student stud[size];

    FILE *fp = fopen("C:\\Users\\Ekaterina\\Desktop\\fin.txt", "r");

    //while (!feof(fp))

    for (i = 0; !feof(fp); i++)
    {
        fscanf(fp, "%s %s %s %s %s\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, &stud[i].group);
        printf("%s %s %s %s %s\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, &stud[i].group);
        n++;
    }

    printf("Введите институт");
    scanf("%s",&inst);

    printf("Введите группу");
    scanf("%s", &gr);

    FILE *fo = fopen("C:\\Users\\Ekaterina\\Desktop\\fo3.txt", "w+");
    find(fo, stud, &gr, &inst,n);

    return 0;
}
...
Рейтинг: 0 / 0
28.05.2017, 16:01
    #39461059
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[C] Информация о студенте из файла, вывод другой информации в файл
ElaysaПосле ввода группы пишет, что поврежден стек вокруг переменной "inst"
Не вижу проверки на переполнение массива студентов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.05.2017, 09:05
    #39461246
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[C] Информация о студенте из файла, вывод другой информации в файл
Катенька, у вас же есть отладчик... Мы не можем вам сказать - почему/отчего у вас ошибка, потому что вы не предоставили ни отладочной информации, ни файла со списком студентов, чтобы прогнать вашу программу с исходными данными.
...
Рейтинг: 0 / 0
29.05.2017, 22:09
    #39461851
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[C] Информация о студенте из файла, вывод другой информации в файл
Elaysa,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void find(FILE *fo, Student *stud, char *gr, char *inst, int n)

{
    for (int i = 0; i < n; i++) //тело цикла лучше выделить фигурными скобками {}
        if ((stud[i].group == gr) && (strcmp(stud[i].univer, inst) == 0))// странное у вас сравнение, в первом случае сравниваете только указатели, во втором Си-строки
        {
            printf("%s %s %s %s %s\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, stud[i].group);
            fprintf(fo, "%s %s %s %s %s\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, stud[i].group);
        }
}



Код: plaintext
1.
2.
3.
4.
5.
char inst;
...
scanf("%s",&inst);
...
find(fo, stud, &gr, &inst,n);



Здесь, вероятно, вы хотели использовать массив символов
...
Рейтинг: 0 / 0
30.05.2017, 12:37
    #39462188
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[C] Информация о студенте из файла, вывод другой информации в файл
Elaysa,

В fscanf надо передавать адреса вводимых переменных,

Код: plaintext
1.
fscanf(fp, "%s %s %s %s %s\n", stud[i].famly, stud[i].fName, stud[i].sName, stud[i].univer, &stud[i].group);



не понятно, почему ты в одном месте берёшь адрес, а в другом месте -- нет.
(мне объяснять, почему это может работать, не нужно).
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / [C] Информация о студенте из файла, вывод другой информации в файл / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]