0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 3
1

Ввод и вывод массива структур

15.12.2010, 23:23. Показов 7828. Ответов 7
Метки нет (Все метки)

все вроде ничего, прога работает, но не получается вывести в консоль то, что нужно.. в размерности массива где-то я, наверное, плаваю..
Сделать нужно было с помощью библиотечных функций ввода-вывода.
вот, собственно, само задание:
"Создать программу, позволяющую вводить элементы массива структур (размерность массива не более 30 элементов), содержащие сведения о расписании поездов: день недели, станция назначения (название не более 20 символов, количество поездов до данной станции в день не более 5, количество станций не более 10), номер поезда и время отправления, и позволяющую по задаваемой станции назначения посмотреть сведения о соответствующих поездах: день недели, номер поезда и время отправления".

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
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
int main(){
    const int l_station = 20;
    struct Train {
    char day[l_station+1];
    char num[l_station+1];
    char station[l_station+1];
    char time[l_station+1];
    };
    const int l_dbase = 3;
Train dbase[l_dbase];
char station[l_station+1];
 
 FILE *fout;
   if ((fout = fopen("D:\dbase.txt", "w")) == NULL){
      puts("Oshibka\n");getch(); return 1; }
  
   for (int i=0; i<l_dbase; i++){
        scanf ("%s%s%s%s", &dbase[i].station, &dbase[i].day, &dbase[i].num, &dbase[i].time);
        fprintf(fout, "%s %s %s %s \n", dbase[i].station, dbase[i].day, dbase[i].num,  dbase[i].time);
}
fclose (fout);
fflush (stdin);
 
FILE *fin;
    
 if ((fin = fopen("D:\dbase.txt", "r")) == NULL){
      puts("Oshibka\n");getch(); return 1; }
 int i = 0;
  while (!feof(fin)) { 
 
    fgets(dbase[i].station, l_station, fin);
 
    fscanf(fin, "%s%s%s\n", &dbase[i].day, &dbase[i].num, &dbase[i].time);   
   i++;
   if (i>l_dbase) {puts ("slishkom\n"); return 1;}}
 
  while (true) {
 
    puts("Enter station: "); 
 
    gets(station);
      if (strlen(station) == 0)break;             
 
    bool not_found = true;
  
   for (i = 0; i < l_dbase; i++) {
   if (strstr(dbase[i].station, station))   
        if (dbase[i].station[strlen(station)] = ' ') {
 
            strcpy(station, dbase[i].station);
            printf("%s%s%s%s\n", station, dbase[i].day, dbase[i].num, dbase[i].time);
 
            not_found = false;}
 
   }   
 
    if (not_found) puts("Netu\n");
 
  }
  fclose(fin);
  getch();
  return 0;
 
}
Подскажите, пожалуйста, где у меня есть ошибки!! Буду очень благодарен
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2010, 23:23
Ответы с готовыми решениями:

Ввод, вывод массива структур, поиск по заданному пользователем полю
Здравствуйте. Необходимо написать 3 функции. Ввод, вывод массива структур, поиск по заданному...

Неожиданный консольный вывод в задании на поиск в массиве структур по заданному полю (файловый ввод/вывод)
Подскажите, почему программа не работает? Только вот это сообщение выходит: Process exited after...

Вывод содержимого массива структур на экран
Сваял структуру: #include &lt;stdio.h&gt; #include &lt;string.h&gt; #define SIZE 25 struct date_by_date {...

Определение и вывод номеров минимальных элементов двумерного массива и ввод массива меньшей размерности
Доброго времени суток. Пожалуйста, помогите с решением задания. Заранее спасибо. Исходная...

7
4865 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
16.12.2010, 02:58 2
C
1
"D:\\dbase.txt"
0
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 3
17.12.2010, 01:55  [ТС] 3
Цитата Сообщение от accept Посмотреть сообщение
C
1
"D:\\dbase.txt"
спасибо, но количество слешов не важно, прога у меня и так запускается, только где-то с длинами строк у меня проблема(( при копировании из текстового документа пробельный символ, я так пониманию, не воспринимается как разделитель. В консоль так и выводит якобы "слово" из 20 символов, сколько как раз я и зарезервировал под него.
Помогите, плизз, прогу нужно сдать во вторник, а над ней я уже бьюсь более недели!! а после этой мне дадут новую прогу.. Прошу, помогите разобраться, пожалуйста, оч нужно получить зачет!!
0
4865 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
17.12.2010, 03:07 4
Цитата Сообщение от dikeromaty
спасибо, но количество слешов не важно
попробуй сделать программку, которая создаёт файл fopen("d:\file.txt", "w");
и по-нормальному fopen("d:\\normfile.txt", "w");
увидишь, что первый не создаётся, а второй создаётся
потому что бэкслеш в первом
экранирует f

C
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(void)
{
    printf("%s" "\n", "d:\file.txt");
    return 0;
}
Код
[guest@localhost tests]$ ./t
d:
  ile.txt
[guest@localhost tests]$


C
1
2
    if (strstr(dbase[i].station, station))   
        if (dbase[i].station[strlen(station)] = ' ') {
почему не strcmp() ?
dbase[i].station[strlen(station)] = ' ' это что, нуль-символ проверяется на пробел
0
В астрале
Эксперт С++
8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.12.2010, 03:54 5
accept, Пожалуй даже присваивается.
1
1 / 1 / 1
Регистрация: 18.12.2010
Сообщений: 6
18.12.2010, 03:41 6
C++
1
if (dbase[i].station[strlen(station)] = ' ')
Таким образом вы присваиваете пробел выражению
C++
1
dbase[i].station[strlen(station)]
правильно будет написать:
C++
1
if (dbase[i].station[strlen(station)] == ' ')
0
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 3
18.12.2010, 19:21  [ТС] 7
Цитата Сообщение от freeIQ Посмотреть сообщение
правильно будет написать:
Код C++
1
if (dbase[i].station[strlen(station)] == ' ')
большое спасибо вам за помощь!!
с проверкой на нуль символ я что-то ступил, однако погоды он не меняет..(
у нас просто препод *** - ничерта не объясняет, для чего он там маячит вообще целых полтора часа у доски??
приходится изучать Си самому, однако времени и так мало.. Попробую что-нибудь придумать
0
4865 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.12.2010, 05:19 8
там какой смысл искать пробел ?
fscanf() пробелы пропускает, когда читаешь через %s
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2010, 05:19
Помогаю со студенческими работами здесь

Вывод массива структур (Выводится какой-то непонятный набор чисел)
Всем привет! Возникла следующая проблема: при попытке вывести элемент st.yob из массива структур...

Ввод/вывод динамического массива
нужно ввести массив и вывести его на экран. размерность и массив вводит, вывод не показывает.не...

Ввод и вывод двухмерного массива
Здравствуйте! Не могу найти у себя ошибку в коде. Нашел похожие темы-не помогло. Помогите,...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru