powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / [C] Информация о студенте из файла, вывод другой информации в файл
5 сообщений из 5, страница 1 из 1
[C] Информация о студенте из файла, вывод другой информации в файл
    #39461034
Elaysa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[СИ]
Помогите пожалуйста найти ошибку, что уже только не перепробовала, не могу найти
После ввода группы пишет, что поврежден стек вокруг переменной "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
[C] Информация о студенте из файла, вывод другой информации в файл
    #39461059
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElaysaПосле ввода группы пишет, что поврежден стек вокруг переменной "inst"
Не вижу проверки на переполнение массива студентов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
[C] Информация о студенте из файла, вывод другой информации в файл
    #39461246
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Катенька, у вас же есть отладчик... Мы не можем вам сказать - почему/отчего у вас ошибка, потому что вы не предоставили ни отладочной информации, ни файла со списком студентов, чтобы прогнать вашу программу с исходными данными.
...
Рейтинг: 0 / 0
[C] Информация о студенте из файла, вывод другой информации в файл
    #39461851
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
[C] Информация о студенте из файла, вывод другой информации в файл
    #39462188
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / [C] Информация о студенте из файла, вывод другой информации в файл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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