Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
9 / 9 / 3
Регистрация: 17.08.2012
Сообщений: 43
1

Чтение строки из файла

28.08.2012, 10:19. Показов 3911. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток уважаемые форумчане!
Помогите, пожалуйста, понять:
Почему после вывода поля Имя из файла, данные год рождения и зарплата выводятся с новой строки?
Сколько не смотрел в отладчике значения буфера fi - так и не нашел заветную \n...
И можно ли как-то вывести все в одну строку?
Спасибо.

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
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#define SP system("pause");
#define CP SetConsoleCP(1251); SetConsoleOutputCP(1251);
#define NEWLINE putchar('\n');
#define konec  system("pause"); return 0;
 
int main()
{
    struct person
        {
            char fio[100];
            int birth;
            double salary;
        }
        rabotnik;
        
        char fi[100];
        int i;
        double d;
                
        CP
        
        printf("Введите ФИО работника: ");
        gets(rabotnik.fio);
        printf("Введите дату раждения работника: ");
        scanf("%d", &rabotnik.birth);
        printf("Введите размер зарплаты работника: ");
        scanf("%lf", &rabotnik.salary); 
        
        printf("Структура имеет размер - %d\n", sizeof(rabotnik));
        printf("%s %d %.2lf\n", rabotnik.fio, rabotnik.birth, rabotnik.salary);
        printf("Вывод в файл...\n");
        
        FILE *f;
        
        f = fopen("C:/test.txt", "wb");
        if(f == NULL) {printf("Ошибка открытия файла на запись.\n"); return 1;}
 
        fwrite(rabotnik.fio, sizeof(char), sizeof(rabotnik.fio)/sizeof(char), f);
        fwrite(&rabotnik.birth, sizeof(int), 1, f);
        fwrite(&rabotnik.salary, sizeof(double), 1, f);
        fclose(f);
        
        printf("Чтение из файла...\n");
        f = fopen("C:/test.txt", "rb");
        if(f == NULL) {printf("Ошибка открытия файла на чтение.\n"); return 2;}
        
        fread(fi, sizeof(char), sizeof(rabotnik.fio)/sizeof(char), f);
        fread(&i, sizeof(int), 1, f);
        fread(&d, sizeof(double), 1, f);
        fclose(f);
        
        puts(fi); printf("%d ", i); printf("%.2lf", d);
        
NEWLINE
konec   
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2012, 10:19
Ответы с готовыми решениями:

Чтение строки из файла
В файле записаны числа, например, 1234567 Я хочу считать данную последовательность как строку....

Чтение из файла строки
имеется однонаправленный список с полями строками,хочу заполнить его из файла,но при чтении файла...

Чтение строки из бинарного файла
вопрос в шапке: как считать строку из бинарного файла? размер строки не известен... про азы типа...

Чтение заданной строки из файла
И снова здравствуйте. Интересует такой вопрос, возможно ли обратиться напрямую к заданной строке в...

4
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
28.08.2012, 10:24 2
После ввода строки с консоли в ней сохраняется символ '\n'. Нужно делать так:
C++
1
 42      fwrite(rabotnik.fio, sizeof(char), sizeof(rabotnik.fio)/sizeof(char)-1, f);
C++
1
 51      fread(fi, sizeof(char), sizeof(rabotnik.fio)/sizeof(char)-1, f);
1
9 / 9 / 3
Регистрация: 17.08.2012
Сообщений: 43
28.08.2012, 10:39  [ТС] 3
Цитата Сообщение от zitxbit Посмотреть сообщение
После ввода строки с консоли в ней сохраняется символ '\n'. Нужно делать так:
C++
1
 42      fwrite(rabotnik.fio, sizeof(char), sizeof(rabotnik.fio)/sizeof(char)-1, f);
C++
1
 51      fread(fi, sizeof(char), sizeof(rabotnik.fio)/sizeof(char)-1, f);
В отладчике проверил данные в rabotnik.fio сразу после ввода строки в консоли. Кроме \0 больше ничего нет.
Попробовал сделать так как Вы посоветовали, результат не изменился.

Из справочника:

Функция gets() читает символы из стандартного потока stdin и помещает их в массив символов, адресуемый указателем str. Символы читаются до тех пор, пока не встретится разделитель строк или значение EOF. Вместо разделителя строк в конец строки вставляется нулевой символ, свидетельствующий о ее завершении.
0
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
28.08.2012, 10:51 4
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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#define SP system("pause");
#define CP SetConsoleCP(1251); SetConsoleOutputCP(1251);
#define NEWLINE putchar('\n');
#define konec  system("pause"); return 0;
 
struct person
{
    char fio[100];
    int birth;
    double salary;
};
 
int main()
{
        CP
 
        struct person rabotnik;
        
        printf("Введите ФИО работника: ");
        scanf("%s",rabotnik.fio);
        printf("Введите дату раждения работника: ");
        scanf("%d", &rabotnik.birth);
        printf("Введите размер зарплаты работника: ");
        scanf("%lf", &rabotnik.salary); 
        
        printf("Структура имеет размер - %d\n", sizeof(rabotnik));
        printf("%s %d %.2lf\n", rabotnik.fio, rabotnik.birth, rabotnik.salary);
        printf("Вывод в файл...\n");
        
        FILE *f;
        
        f = fopen("d:\\test.txt", "wb");
        if(f == NULL) {printf("Ошибка открытия файла на запись.\n"); return 1;}
 
        fwrite((void*)&rabotnik, sizeof(person), 1, f);
 
//      fwrite(rabotnik.fio, sizeof(char), sizeof(rabotnik.fio)/sizeof(char), f);
//      fwrite(&rabotnik.birth, sizeof(int), 1, f);
//      fwrite(&rabotnik.salary, sizeof(double), 1, f);
        fclose(f);
        
        printf("Чтение из файла...\n");
        f = fopen("d:\\test.txt", "rb");
        if(f == NULL) {printf("Ошибка открытия файла на чтение.\n"); return 2;}
  
        fread((void*)&rabotnik, sizeof(person), 1, f);
 
//      fread(fi, sizeof(char), sizeof(rabotnik.fio)/sizeof(char), f);
//      fread(&i, sizeof(int), 1, f);
//      fread(&d, sizeof(double), 1, f);
        fclose(f);
        
        printf("%s ", rabotnik.fio); printf("%d ", rabotnik.birth); printf("%.2lf", rabotnik.salary);
 
        _getch();
}
Миниатюры
Чтение строки из файла  
1
9 / 9 / 3
Регистрация: 17.08.2012
Сообщений: 43
28.08.2012, 11:31  [ТС] 5
Переделал в своем коде последнюю строку на:
C
1
printf("%s %d %.2lf", fi, i, d);
Заработало. Значит надо разобраться в работе функции puts();.
А вот и накопал:
Функция puts() записывает строку, адресуемую параметром str, в стандартное выходное устройство. Символ конца строки преобразуется в разделитель строк.
Решено.
Всем спасибо!
0
28.08.2012, 11:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2012, 11:31
Помогаю со студенческими работами здесь

Чтение заданной строки из файла
есть файл вида date = 01.02.2010 time = 15:05:45 int day, month, year; if...

Чтение строки символов из файла
Здравствуйте! Помогите найти ошибку в программе. Необходимо из уже созданного текстового файла...

Чтение до конца файла и строки
Здравствуйте, форумчане! На днях в универе задали одну тривиальную задачку, но считывание...

Чтение одной строки из файла
как прочитать строку из файла ровно до символов возврата каретки и перевода строки?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru