Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Serg22
104 / 104 / 58
Регистрация: 04.03.2013
Сообщений: 479
Завершенные тесты: 2
1

Чтение элементов из файла и добавление их в очередь

25.05.2013, 16:16. Просмотров 1060. Ответов 15
Метки нет (Все метки)

Доброго времени суток.

Задача такая: реализация очереди на базе массива и списка (сделал) + добавление\удаление\поиск ел-та\вывод очереди на экран (так же сделал) Осталось, совсем чучуть, но никак не могу реализовать.

Если не отнимет у Вас много времени и сил, прошу помочь
Нужно добавить в программу, возможность:
1) чтение элементов из файла и добавление их в очередь (по желанию: или ввод с клавы или чтение из файла)
2) сохранение результата роботы программы в файл (перед выходом из проги)

Буду очень Вам благодарен.

Программа с коментариями прилагается)
0
Вложения
Тип файла: txt прога курсовой с коментариями.txt (7.5 Кб, 15 просмотров)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2013, 16:16
Ответы с готовыми решениями:

Очередь на многопоточное чтение файла
Привет, в общем из названия ясно что мне нужно, изначально сделал так: Private Function...

Добавление элементов в очередь
Помогите реализовать добавление элементов в структуру-очередь (что бы добавить новый элемент нужно...

Реализовать добавление элементов в очередь
Помогите сделать,кто знает: Создать очередь случайных чисел. Реализовать добавление элементов в...

Добавление элементов в очередь и вывод на экран
Помогите реализовать простенькую программку из паскаля в delphi. А то я слаб в нём... Мне самое...

Изменить удаление и добавление элементов в очередь по правилу FIFO.
Необходимо изменить удаление и добавление элементов в очередь (функции push и pop), по правилу...

15
Serg22
104 / 104 / 58
Регистрация: 04.03.2013
Сообщений: 479
Завершенные тесты: 2
26.05.2013, 11:18  [ТС] 2
ну оооооочень актуально)
0
kazak
3061 / 2382 / 255
Регистрация: 11.03.2009
Сообщений: 5,440
Завершенные тесты: 1
26.05.2013, 14:08 3
Цитата Сообщение от Serg22 Посмотреть сообщение
Нужно добавить в программу, возможность:
1) чтение элементов из файла и добавление их в очередь (по желанию: или ввод с клавы или чтение из файла)
2) сохранение результата роботы программы в файл (перед выходом из проги)
С чем конкретно трудности возникают?
0
Serg22
104 / 104 / 58
Регистрация: 04.03.2013
Сообщений: 479
Завершенные тесты: 2
26.05.2013, 22:17  [ТС] 4
ну вот я пытаюсь реализовать чтение из файла:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
char str[255+1];
char data3[] = "D:\\data3.txt";
 
FILE *fid;
 
 
if ((fopen_s(&fid, "D:\\data3.txt", "r"))  != 0)
{ printf("\n\t The file could not be opened.\n ");
printf("\n Press any key: ");
 _getch(); 
return 0; }
 
while (fgets(str, 255, fid) != NULL) // Чтение из data3.txt
 
{fputs(str, stdout); // Вывод на консоль
} ---------------------------------------------------
// здесь еще должно быть считывание посимвольно строки и добавление в очередь, но  не могу сделать это)
getc(str);// как-то так ...
 
fclose(fid);
ну вот должно получиться что-то типо такого, но никак не могу привести это в рабочий вид в проге((
C
1
2
3
4
5
6
7
8
9
int i = 0;
while (i < strlen(str)){
 if (str[i] == ' '){
addToQUEUE(number);
number = 0;}
else{
number = number*10 + (str[i]-'0')
}
}
Подскажите, пожалйста)

ЗЫ: а вот 2ю функцию - сохранение в файл возник вопрос: есть ли ф-ция, что бы сохранить всю инфу с консоли в файл ?)
0
kazak
3061 / 2382 / 255
Регистрация: 11.03.2009
Сообщений: 5,440
Завершенные тесты: 1
26.05.2013, 22:22 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

А форматированное чтение Вам не подходит?
C
1
2
3
4
5
while (fscanf(fid, "%d", &value))
{
   printf("%d\n", value);
   Push_Queue_List(&queue, value);
}
0
Serg22
104 / 104 / 58
Регистрация: 04.03.2013
Сообщений: 479
Завершенные тесты: 2
26.05.2013, 22:28  [ТС] 6
Форматированое - это уже язык с++?
0
kazak
3061 / 2382 / 255
Регистрация: 11.03.2009
Сообщений: 5,440
Завершенные тесты: 1
26.05.2013, 22:30 7
Нет, fscanf/fprintf стандартные сишные функции работы с файлами из stdio.h. Аналогичны scanf/printf.
1
Serg22
104 / 104 / 58
Регистрация: 04.03.2013
Сообщений: 479
Завершенные тесты: 2
26.05.2013, 22:36  [ТС] 8
Во, подходит! а как это выглядит в программе? добавлю эл-т меню
C#
1
5)Добавление эл-тов очереди из файла
и куда "всунуть" этот кусочек кода?
0
kazak
3061 / 2382 / 255
Регистрация: 11.03.2009
Сообщений: 5,440
Завершенные тесты: 1
26.05.2013, 22:43 9
Что-то вроде этого
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
case 5:  
    FILE *fid;
 
    if ((fopen_s(&fid, "D:\\data3.txt", "r"))  != 0)
    { 
        printf("\nОшибка открытия файла.\n ");
        printf("\nНажмите любую клавишу.");
        _getch(); 
        break; 
    }
    printf("Загрузка данных из файла> \n");
    while (fscanf(fid, "%d", &value))
    {
        printf("%d\n", value);
        Push_Queue_List(&queue, value);
    }
    fclose(fid);
    printf("Загрузка завершена\n");
    break;
1
Serg22
104 / 104 / 58
Регистрация: 04.03.2013
Сообщений: 479
Завершенные тесты: 2
26.05.2013, 23:05  [ТС] 10
Спасибо! Для очереди на базе списка работает, но можно еще,пожалуйста, условие по достижению конца файла (потому что у меня прога зацикливается на последнем элементе)
ps: и как можно переделать Ваш код, под очередь на базе массива?
C
1
2
3
4
5
case 1:Push_Queue_Array(mas,&n,&end);break;//додавання елемента в чергу
case 2:Print_Queue_Array(mas,end,start,n);break;// вивід черги на екран
case 3:Del_QueueElement_Array(mas,&n,&start);break;// видалення елемента з черги
case 4:Find_Queue_Array(mas,end,start);break;// пошук елемента в черзі
case 5:
0
kazak
3061 / 2382 / 255
Регистрация: 11.03.2009
Сообщений: 5,440
Завершенные тесты: 1
26.05.2013, 23:16 11
Цитата Сообщение от Serg22 Посмотреть сообщение
Спасибо! Для очереди на базе списка работает, но можно еще,пожалуйста, условие по достижению конца файла (потому что у меня прога зацикливается на последнем элементе)
C
1
2
3
4
5
6
7
fscanf(fid, "%d", &value);
while (!feof(fid))
{
    printf("%d\n", value);
    Push_Queue_List(&queue, value);
    fscanf(fid, "%d", &value);
}
Цитата Сообщение от Serg22 Посмотреть сообщение
и как можно переделать Ваш код, под очередь на базе массива?
Меняете функцию добавления в очередь на функцию добавления в массив. После вызова проверяете наличие свободного места в массиве, если места нет, прерываете цикл, и если надо, выводите соответствующее сообщение.
1
Serg22
104 / 104 / 58
Регистрация: 04.03.2013
Сообщений: 479
Завершенные тесты: 2
26.05.2013, 23:24  [ТС] 12
Я очень Вас благодарен) и 2й момент: есть ли такая возможность, что бы все содержимое консоли(при завершении работы) сохранять в отдельный файл?
0
kazak
3061 / 2382 / 255
Регистрация: 11.03.2009
Сообщений: 5,440
Завершенные тесты: 1
26.05.2013, 23:59 13
Консоли или очереди с массивом?
0
Serg22
104 / 104 / 58
Регистрация: 04.03.2013
Сообщений: 479
Завершенные тесты: 2
27.05.2013, 11:53  [ТС] 14
ну желательно всей информации что на консоли) если такой возможности нет (что скорее всего) , то содержимое очереди на базе списка и массива ((после выполнения все операций, перед самим уже выходом))..
0
Serg22
104 / 104 / 58
Регистрация: 04.03.2013
Сообщений: 479
Завершенные тесты: 2
27.05.2013, 22:24  [ТС] 15
kazak, Можете,пожалуйста,уделить мне еще пару минут времени) вот сделал все как вы порекомендовали. В случае с списком, файловый ввод работает на ура) а вот с массивом не получается.. не могу понять, куда дописать значение value в ф-ции Push_Queue_Array. посмотрите, пожалуйста.
0
Вложения
Тип файла: txt прога курсовой с файлом.txt (8.6 Кб, 3 просмотров)
kazak
3061 / 2382 / 255
Регистрация: 11.03.2009
Сообщений: 5,440
Завершенные тесты: 1
27.05.2013, 23:35 16
C
1
2
3
4
5
6
while (!feof(fid))
{
    printf("%d\n", value);
    Push_Queue_Array(&queue, &value,mas,end);
    fscanf(fid, "%d", &value);
}
=>

C
1
2
3
4
5
6
7
8
9
10
11
while (!feof(fid))
{
    printf("%d\n", value);
    Push_Queue_Array(&queue, &value,mas,end);
        if (mas == end)
        {       
                printf("Массив переполнен\n");
                break;
        }
    fscanf(fid, "%d", &value);
}
Цитата Сообщение от Serg22 Посмотреть сообщение
ну желательно всей информации что на консоли)
Заводите глобальную файловую переменную. Открываете файл. И везде, где есть вывод на экран, дублируете вывод в файл.
1
27.05.2013, 23:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2013, 23:35

чтение из файла и добавление в контейнер
std::ofstream out; out.open(&quot;FilegRANDCHILED.dat&quot;, std::ios::binary | std::ios::trunc);...

Чтение данных из файла и добавление их на форму
Здравствуйте. Нужно открыть текстовый файл, найти слово &quot;Дата&quot;, и цыфры, следующие за словом...

Создать очередь из файла, совершение операций надо очередью(удаление элемента, добавление, запись в файл, вывод)
Друзья, завтра сдать курсач, неделю парился с кодом. В итоге ничего дельного не вышло. Обращаюсь к...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru