powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Zapisi, ctenie struct v/iz faila
25 сообщений из 32, страница 1 из 2
Zapisi, ctenie struct v/iz faila
    #33757986
gda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
#include <stdio.h> 
 
int main(void)
{
    struct Tara {
        char denum[ 50 ];
        float aria;
        int popul;
        int scoli;
        int spitale;
        int is;
    } p;
 
    FILE *f_str;
 
    if ((f_str=fopen("str.txt","w")) == NULL)
    {
        printf("Cannot open input file.\n");
        return  1 ;
    }
                                                                       
    printf("Introdu denumirea tarii: "); scanf("%s",&p.denum); 
    printf("Intodu aria: "); scanf("%f",&p.aria);
    printf("Intodu populatia: "); scanf("%d",&p.popul);
    printf("Intodu nr. de scoli: "); scanf("%d",&p.scoli);
    printf("Intodu nr. de spitale: "); scanf("%d",&p.spitale);
    printf("Intodu nr. de institutii superiaore: "); scanf("%d",&p.is);
 
 
 
    #printf("%s\n",p.denum); 
 
    fclose(f_str);
 
 
 
    return  0 ;
}
 

nujen primer zapisi viseucazanoi structuri v fail... i sootvestveno ctenie ee
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33757995
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
fprintf, fwprintf
Print formatted data to a stream.

int fprintf( FILE *stream, const char *format [, argument ]...);


автор
fscanf, fwscanf
Read formatted data from a stream.

int fscanf( FILE *stream, const char *format [, argument ]... );
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758123
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
fwrite(&p,sizeof(p), 1 ,f_str);
fread(&p,sizeof(p), 1 ,f_str);
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758239
gda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
 fscanf(f_str,"%s%f%d%d%d%d",&arr[ 0 ].denum,&arr[ 0 ].aria,&arr[ 0 ].popul,&arr[ 0 ].scoli,&arr[ 0 ].spitale,&arr[ 0 ].is);
    printf(arr[ 0 ].denum);

soderjanie faila: f_str

Код: plaintext
1.
2.
Moldova  2 . 300000          2         43        2 
Russia   4 . 600000          2         85        6 
Ucraina  7 . 000000          5         93        4 
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758244
gda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
printf("%s",arr[0].denum); nicego ne pocazivaet
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758316
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда делаешь fprintf(), в строке формата между данными ставь пробел, чтобы у тебя одни данные от других отличались разделителями. Потом, когда считываешь, то же самое стовь в параметре формата функции fscanf.
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758336
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем fread и fwrite не понравились? Через них намного удобнее работать с типизированными файлами. Чтение/запись всей структуры сразу, и не нужны дополнительные разделители данных...
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758359
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K.А чем fread и fwrite не понравились? Через них намного удобнее работать с типизированными файлами. Чтение/запись всей структуры сразу, и не нужны дополнительные разделители данных...

Для лабораторной работы наглядность более предпочтительна, если не оговорены требования
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758644
Goldminer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K.
Код: plaintext
1.
2.
fwrite(&p,sizeof(p), 1 ,f_str);
fread(&p,sizeof(p), 1 ,f_str);

Только тогда обратить внимание на режим открытия:
Код: plaintext
1.
2.
 
f_str = fopen("str.txt",  "wb" )
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758660
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldminerТолько тогда обратить внимание на режим открытия
Да, совершенно верно, "без b" возможны интересные последствия ))
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758737
gda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
#include <stdio.h> 
 
int main(void)
{
    struct Tara {
        char denum[ 50 ];
        float aria;
        int popul;
        int scoli;
        int spitale;
        int is;
    } p, a[ 1000 ];
 
    FILE *f_str;
 
 
    if ((f_str=fopen("str.txt","wb")) == NULL)
    {
        printf("Cannot open input file.\n");
        return  1 ;
    }
 
    printf("Introdu denumirea tarii: "); scanf("%s",&p.denum);
    printf("Intodu aria: "); scanf("%f",&p.aria);
    printf("Intodu populatia: "); scanf("%d",&p.popul);
    printf("Intodu nr. de scoli: "); scanf("%d",&p.scoli);
    printf("Intodu nr. de spitale: "); scanf("%d",&p.spitale);
    printf("Intodu nr. de institutii superiaore: "); scanf("%d",&p.is);
 
    fprintf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",p.denum,p.aria,p.popul,p.scoli,p.spitale,p.is);
    fscanf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",&a[ 0 ].denum,&a[ 0 ].aria,&a[ 0 ].popul,&a[ 0 ].scoli,&a[ 0 ].spitale,&a[ 0 ].is);
    printf("%s",a[ 0 ].denum);
    fclose(f_str);
 
 
    return  0 ;
}
 

postavil probeli ... poliubomu ne pomoglo ...

fprintf polee dlia menea poniatnei cem fwrite ...
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758770
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
fprintf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",p.denum,p.aria,p.popul,p.scoli,p.spitale,p.is);
   fscanf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",&a[ 0 ].denum,&a[ 0 ].aria,&a[ 0 ].popul,&a[ 0 ].scoli,&a[ 0 ].spitale,&a[ 0 ].is);
Ты записал строчку в файл и указатель потока работы с файлом у тебя находится сразу за строчкой. Для того, чтобы он сместился на начало файла, надо либо воспользваться функцией fseek(), либо закрыть файл и открыть его заново. А заново, лучше его открывай в режиме для чтения
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758772
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pune intre fprintf si fscanf fseek(f_str, 0L, SEEK_SET);
gdafprintf polee dlia menea poniatnei cem fwrite ...
Nimic complicat in folosirea fwrite/fread nu-i:
fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
ptr - adresa structurei cu datele
size - lungimea structurei cu datele
n - numarul de structuri pentru scriere/citire (adica poti sa citesti/scrii mai mult de o stucrura odata)
stream - fisierul, cu care lucrezi

Incearca exemplu, care am scris mai sus.
Completezi datele, inscrii (fwrite), pui curcorul la inceputul fisierului si citesti (fread)
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758791
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и еще:
1) В режиме доступа к файлу, при открытии, буковка b означает block. Или ты пользуешься функциями предложенными Дмитрием, и записываешь данные в файл в том виде, в котором они у тебя находятся в память или открываешь файл как текстовой, для того, чтобы fscanf и fprintf знали, что они работают с текстовым файлом (тот факт, что они работают сейчас ни о чем не говорит)
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758809
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл уточнить: block - имеется ввиду блок данных, набор всякой всячины, которая может быть чем угодно. Текстовый файл - набор данных, которые предствляются читабельным текстом с небольшим набором управляющих символов (перевод строки, табуляция, ...)
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758826
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhДа, и еще:
1) В режиме доступа к файлу, при открытии, буковка b означает block.
Это binary :) Разница c text - в интерпретации последовательности 0D,0A
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758836
gda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
   fwrite(&p,sizeof(p), 1 ,f_str);
//    fprintf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",p.denum,p.aria,p.popul,p.scoli,p.spitale,p.is);            
    fseek(f_str, 0L, SEEK_SET);
    fread(&p,sizeof(p), 1 ,f_str);
//    fscanf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",&a[0].denum,&a[0].aria,&a[0].popul,&a[0].scoli,&a[0].spitale,&a[0].is);        
    printf("%s",a[ 0 ].denum);
    fclose(f_str);

poproboval i fseek i fwrite i fread ... ni h% ne vihodit ..

A kak ispolizuia fread zaliti danie v array, potom mne s atim array nado porabotati ... otsortirovati i vivesti na ecran ...
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758859
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gda
Код: plaintext
1.
2.
3.
4.
5.
6.
   fwrite(&p,sizeof(p), 1 ,f_str);
//    fprintf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",p.denum,p.aria,p.popul,p.scoli,p.spitale,p.is);            
    fseek(f_str, 0L, SEEK_SET);
    fread(&p,sizeof(p), 1 ,f_str);
//    fscanf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",&a[0].denum,&a[0].aria,&a[0].popul,&a[0].scoli,&a[0].spitale,&a[0].is);        
    printf("%s",a[ 0 ].denum);
    fclose(f_str);

poproboval i fseek i fwrite i fread ... ni h% ne vihodit ..

A kak ispolizuia fread zaliti danie v array, potom mne s atim array nado porabotati ... otsortirovati i vivesti na ecran ...
Вместо
Код: plaintext
printf("%s",a[ 0 ].denum);
поставь
Код: plaintext
printf("%s",p.denum);
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758869
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gdaA kak ispolizuia fread zaliti danie v array, potom mne s atim array nado porabotati ... otsortirovati i vivesti na ecran ...
Используй массив структур. Обычно в таком случае используется либо динамический массив, либо список... Но для начала объяви статический массив достаточного размера.
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758870
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gda
poproboval i fseek i fwrite i fread ... ni h% ne vihodit ..


В твоем последнем примере
Код: plaintext
1.
2.
    fprintf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",p.denum,p.aria,p.popul,p.scoli,p.spitale,p.is);
    fscanf(f_str,"%s\t%f\t%d\t%d\t%d\t%d\t",&a[ 0 ].denum,&a[ 0 ].aria,&a[ 0 ].popul,&a[ 0 ].scoli,&a[ 0 ].spitale,&a[ 0 ].is);

между этих строк вставь fclose и fopen с режимом доступа "r", при первом отрытии файла (для записи) убери букву b. Все должно заработать.

Потом попробуй сделать, как написал Дмитрий - очень полезно. Заодно, когда заработает, посмотри, что у тебя в файле лежит (для сравения). Если найдешь что к чему - это будет для тебя большой шаг
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758875
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K. AkhДа, и еще:
1) В режиме доступа к файлу, при открытии, буковка b означает block.
Это binary :) Разница c text - в интерпретации последовательности 0D,0A

Ну, бинари, так бинари. Надо было меньше слушать учителей.
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758884
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, поспешил...
a - это у тебя и есть массив структур...
Тогда организуй чтение данных в цикле до конца файла (feof()) и в fread подставляй соотв. элемент массива (&a )
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758890
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhНадо было меньше слушать учителей. Ага, TFM смотреть надо :)
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758902
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K. AkhНадо было меньше слушать учителей. Ага, TFM смотреть надо :)

Так, блин, похоже на правду. В, принципе, что двоичный, что блочный файл, разница не большая. Понятие только уже
...
Рейтинг: 0 / 0
Zapisi, ctenie struct v/iz faila
    #33758927
Goldminer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K. AkhДа, и еще:
1) В режиме доступа к файлу, при открытии, буковка b означает block.
Это binary :) Разница c text - в интерпретации последовательности 0D,0A

И 1A, что немаловажно!
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Zapisi, ctenie struct v/iz faila
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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