Форум программистов, компьютерный форум CyberForum.ru

С под Linux

Войти
Регистрация
Восстановить пароль
 
Kotovenc
0 / 0 / 0
Регистрация: 14.12.2016
Сообщений: 1
#1

Создать список элементов, считанных с файла - C Linux

14.12.2016, 00:50. Просмотров 285. Ответов 1

Нужно разработать программу, которая вводит из файла, имя которого определяется в командной строке, числа и помещает их в линейный односвязный список так, чтобы элементы его составляли убывающую последовательность.

Данный вариант зацикливает последний элемент в функции putin_wrd. Есть предположение, что он просто не находит p == NULL. Почему такое может быть?

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define BFSIZE 256
 
FILE *file;
 
typedef struct list {
        float number;
        struct list *next;
} list;
 
list *head = NULL;
 
void putin_wrd(float num);
void insert(list *el);
void output(void);
 
int main(int argc, char *argv[])
{
  char c, buf[BFSIZE];
  int flag = 0, i = 0;
  float num;
  
  /*if ((head=(list*)malloc(sizeof(list)))==NULL)
    exit(1);*/
 
  if (argc < 2)
  {
    printf("File is indefined\n");
    exit(0);
  }
  
  if ((file = fopen(argv[1], "r")) == NULL)
  {
    printf("File can't be opened\n");
    exit(-1);
  }
  //до сюда всё работало на 09.12.16
  
  while((c=fgetc(file))!=EOF)
  {
    if((c < 48 || c > 57)&&flag==1)
    {
      flag=0;
      buf[i]='\0';
      num = atof(buf);
      
      putin_wrd(num);
      i=0;
    }
    else
    {
      if(i>BFSIZE)
      {
        printf("Buff error!!!");
        exit(3);
      }
      
      buf[i]=c;
      i++;
      flag=1;
    }
  }
  
  output();
  
  fclose(file);
    
  return 0;
}
 
 
 
void putin_wrd(float num)
{   list *tmp, *p;
        if (num == 6)
      { output();
        exit(1); }
 
 
  printf("1\n");
  
    if((tmp=(list *)malloc(sizeof(struct list)))==NULL)
    {
      printf("Memory error");
      exit(1);
    }
    printf("2\n");
    
    printf("ins\n");
    
    tmp->next = head;
    head = tmp;
    tmp->number = num;
    
    p = head;
  
 
  while((p != NULL) && (tmp->number < p->number))
  {
      printf("4\n");
      
      tmp->next = p->next;
      p->next = tmp;
    
      printf("%f\n", tmp->number);
      
      p = p->next;
      
 
  } 
}
 
 
void output(void)
{
  list *p;
  for (p = head; p->number != 5; p->next)
    printf("%f\n", p->number);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2016, 00:50     Создать список элементов, считанных с файла
Посмотрите здесь:

C Linux Из одного файла считать часть информации и записать в выбранное место второго файла
C Linux Создать файл, состоящий из чисел данного файла, значения которых меньше N
Подключение заголовочного файла, чтобы использовать функцию sayhello() из первого файла во втором C Linux
C Linux Вывести список файлов текущего каталога с указанием имени файла, его длины и прав доступа
C Linux Считать числа из файла и поместить в список

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Skjame
78 / 37 / 7
Регистрация: 20.12.2010
Сообщений: 166
Завершенные тесты: 1
14.12.2016, 11:50     Создать список элементов, считанных с файла #2
Честно говоря мне как-то не нравится Ваша сортировка.
Пузырёк по возрастанию примерно так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void bubble_sort_list(list * list) {
    list * p = NULL;
    
    if (list != NULL) {
        while (list->next != NULL) {
            p = list->next;
            
            do {
                if (p->val < list->val) {
                    int tmp = p->val;
                    p->val = list->val;
                    list->val = tmp;
                }
                
                p = p->next;
            } while (p != NULL);
            
            list = list->next;
        }
    }
}
хотя Вам не нужно бегать по всем элементам, приглядитесь откуда Вы начинаете.
Пройдитесь в отладке и посмотрите на длину своего списка ( на количество пробегаемых элементов ).
Yandex
Объявления
14.12.2016, 11:50     Создать список элементов, считанных с файла
Ответ Создать тему
Опции темы

Текущее время: 08:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru