Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2016, 00:55   #1
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию Чтение структуры с файла и её сортировка на Си

Вообщем дали мне задание:
Считать с текстового файла Фамилии 25 студентов и улицу их проживания. И вывести на экран данные тех студентов которые живут на одной улице. Насколько я понял надо использовать структуры.
Сразу предупреждаю что я компилирую через Clang на линуксе и он ругается на gets\fgets, так что просьба такого не предлагать.
Я Создал файл со сгенерироваными фамилиями и улицами, и теперь не знаю как считать их оттуда, потому что если пробую через scanf то в консоль выводит по половине фамилии и улицы причём вперемешку (тоесть фамилия не совпадает с улицей). Соответственно нужна помощь в обяснении как считать с текстового файла данные в структуру и потом отсортировать их по названию улицы. Ну и если кто знает, то подскажите как сделать так чтобы Clang не ругался. Буду рад любому совету.
Вот файл с фамилиями:
Цитата:
Subbotina
Patona
Kalashnikov
Lichakivska
Subbotin
Puluja
Ustinova
Kulparkivska
Kudrjavcev
Bandery
Merkusheva
Saharova
Silina
KnjahyniOlhy
Petuhov
Naukova
Gerasimova
VolodymyraVelykhogo
Ponomarjova
Naukova
Grigoreva
Puluja
Matvienko
Chornovola
Lukin
Patona
Medvedev
Himichna
Kuznecov
Pekarska
Kabanov
Gorodotska
Pavlov
Lubinska
Bogdanov
Antonovicha
Stepanova
Symonenka
Bogdanova
Vugovskogo
Markov
Stryjska
Bragin
Kopernyka
Bespalova
Khmelnytskogo
Evdokimova
Sadova
Chernova
Himichna
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Старый 18.12.2016, 02:13   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну возьмите вместо гетса фгетс и все
p51x вне форума Ответить с цитированием
Старый 18.12.2016, 02:52   #3
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Компилятор гадится
Код:
#include <stdio.h>
#include <curses.h>
#include <string.h>
#include <ctype.h>
#define N 25

struct Students{
        char name[N];
        char street[N];
}stud[N];

int main(){
    FILE *fl;
    fl=fopen("file.txt","r");
    
    for (int i=0;i<N;i++){
        fgets(fl,"%s",stud[i].name);
        fgets(fl,"%s",stud[i].street);
    }
}
Цитата:
main.c:17:15: error: incompatible pointer types passing 'FILE *' (aka 'struct _IO_FILE *') to parameter of type 'char *' [-Werror,-Wincompatible-pointer-types]
fgets(fl,"%s",stud[i].name);
^~
/usr/include/stdio.h:622:38: note: passing argument to parameter '__s' here
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
^
main.c:17:18: error: incompatible pointer to integer conversion passing 'char [3]' to parameter of type 'int' [-Werror,-Wint-conversion]
fgets(fl,"%s",stud[i].name);
^~~~
/usr/include/stdio.h:622:47: note: passing argument to parameter '__n' here
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
^
main.c:17:23: error: incompatible pointer types passing 'char [25]' to parameter of type 'FILE *' (aka 'struct _IO_FILE *') [-Werror,-Wincompatible-pointer-types]
fgets(fl,"%s",stud[i].name);
^~~~~~~~~~~~
/usr/include/stdio.h:622:69: note: passing argument to parameter '__stream' here
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
^
main.c:18:15: error: incompatible pointer types passing 'FILE *' (aka 'struct _IO_FILE *') to parameter of type 'char *' [-Werror,-Wincompatible-pointer-types]
fgets(fl,"%s",stud[i].street);
^~
/usr/include/stdio.h:622:38: note: passing argument to parameter '__s' here
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
^
main.c:18:18: error: incompatible pointer to integer conversion passing 'char [3]' to parameter of type 'int' [-Werror,-Wint-conversion]
fgets(fl,"%s",stud[i].street);
^~~~
/usr/include/stdio.h:622:47: note: passing argument to parameter '__n' here
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
^
main.c:18:23: error: incompatible pointer types passing 'char [25]' to parameter of type 'FILE *' (aka 'struct _IO_FILE *') [-Werror,-Wincompatible-pointer-types]
fgets(fl,"%s",stud[i].street);
^~~~~~~~~~~~~~
/usr/include/stdio.h:622:69: note: passing argument to parameter '__stream' here
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
^
6 errors generated.
make: *** [main] Error 1
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Старый 18.12.2016, 02:53   #4
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Пытался гуглить ошибку но так и не нашел ничего путного.
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Старый 18.12.2016, 10:09   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Вы справку то откройте и в правильном порядке укажите параметры
p51x вне форума Ответить с цитированием
Старый 25.12.2016, 17:36   #6
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Сделал сортировку, вродебы сортирует правильно, но не все улицы, и выводит лишние символы в консоль.
Код:
#include <stdio.h>
#include <curses.h>
#include <string.h>
#include <ctype.h>
#define N 25

struct Students{
        char name[N];
        char street[N];
};

int main(){
    struct Students A[N],t;
    FILE *fl;
    fl=fopen("file.txt","r");
    for (int i = 0; i < 10; i++) {
        for(int j=i;j<=i;j++){
            fgets(A[i].name, sizeof(A[i].name), fl);
        }
        fgets(A[i].street, sizeof(A[i].street), fl);
    }
    //Sort
    for(int i=0;i<10;i++){
        for(int j=i;j>0;j--){
            if(strcmp(A[j-1].street,A[j].street)>0){
                t = A[j-1];
                A[j-1] = A[j];
                A[j] = t;
            }
        }
    }
    
    for (int i = 0; i < 50 - 1; i++)
        for (int j = i + 1; j < N; j++)
            if (A[i].street[0] > A[j].street[0]){ 
            struct Students tmp = A[i]; 
            A[i] = A[j]; 
            A[j] = tmp; 
            }
    
    for (int i=0;i<N;i++){
        printf("%s",A[i].street);
    }
}
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Старый 25.12.2016, 21:56   #7
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Предидущее задание выполнил, может кто подскажет, как считать целое или дробное число с файла в структуру? fgets не хочет считывать.
Код:
main.c:31:19: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'char *' [-Werror,-Wint-conversion]
            fgets(A[i].value, sizeof(A[i].value), fl);
                  ^~~~~~~~~~
/usr/include/stdio.h:622:38: note: passing argument to parameter '__s' here
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
                                     ^
main.c:33:15: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'char *' [-Werror,-Wint-conversion]
        fgets(A[i].price, sizeof(A[i].price), fl);
              ^~~~~~~~~~
/usr/include/stdio.h:622:38: note: passing argument to parameter '__s' here
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
                                     ^
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Старый 25.12.2016, 22:25   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

fread, fscanf и т.д. Естественно fgets не читает, он же file get string
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение структуры с файла __Platina__ Общие вопросы C/C++ 17 26.05.2016 16:29
Чтение из файла, структуры -=M{a}LoY=- Общие вопросы C/C++ 9 09.10.2012 23:23
Чтение структуры из файла! Olegzxc Общие вопросы C/C++ 1 01.12.2011 00:40
Чтение структуры из файла atenon Общие вопросы C/C++ 11 22.10.2010 20:35
Чтение структуры файла SDK Помощь студентам 4 23.01.2008 19:30