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

С++ для начинающих

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

Чтение из файла - C++

21.12.2013, 16:06. Просмотров 423. Ответов 17
Метки нет (Все метки)

В файле хранится 5 строк о каждом человеке разделенной точкой с запятой. То бишь фамилия;имя;отчество;дата_рождения;курс;пол
Когда в файл записываешь больше 5 строк, то выводит вот такую ошибку:

Unhandled exception at 0x001a4d62 in Train.exe: 0xC0000005: Access violation writing location 0x00e3f3e1.

Собственно это потому, что программа не может перевести буквы числа. Но проблема в том, что непонятно почему в переменной list[i].year появляется помимо возраста еще и фамилия. ЭТО ТОЛЬКО ПОТОМУ что в файле больше 5 строк. Когда в файле РОВНО 5 строк данной ошибки не возникает. В чем проблема?

list[i] - это массив структур

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
void f_open(){
    FILE *file;
 
    file = fopen("info.txt","rt");
 
    if(file == NULL){
        system("pause");
    }
 
    int i=0;
    while(!feof(file)){
 
        fscanf(file,"%s\n",buf);
        
        char *point = strchr(buf,';');
 
        strncpy(list[i].surname,buf, point-buf);
        list[i].surname[point-buf]=0;
 
 
        char *n = point + 1;
        point = strchr(point+1,';');
 
        strncpy(list[i].name, n,point - n);
        list[i].name[point - n]=0;
 
 
        char *s_n = point + 1;
        point = strchr(point+1,';');
 
        strncpy(list[i].sec_name, s_n,point-s_n);
        list[i].sec_name[point-s_n]=0;
 
 
        char *year = point + 1;
        point = strchr(point+1,';');
 
        strncpy(list[i].year, year,point-year);
        list[i].year[point-year]=0;
        
        i++;
    }
 
    fclose(file);
 
    for(int i=0;i<n;i++){
        age[i] = atoi(list[i].year);
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2013, 16:06     Чтение из файла
Посмотрите здесь:

чтение файла - C++
в книге ifstream aa; aa.open(............); нам объясняли: ifstream open(''lala.txt,ios::....); точно не помню

Чтение из файла - C++
У.у..у.. чёрт побери...что - то я запарился на эти сишные функции мануалы читать.....всё забыл... Может кто напомнит строчку кода, как...

Чтение из файла C++ - C++
ввожу код из книги демидовича на тему вывода данных из файла на экран а он не рабочий, помогите пожалуйста я сделал свой код но все равно...

Чтение из файла - C++
Как вывести содержимое ранее созданных файлов на на экран? Вот кусок кода. Открыть то я открыл, а построчно вывести не могу, не знаю что...

Чтение с файла - C++
Вот у меня есть код , но при попытке считать из него числа почему выдает не то что нужно , в чем может быть ошибка ? #include...

Чтение из файла - C++
Задача состоит в следующем. Есть файл, в котором в трех колонках размещены по 5 подлежащих, сказуемых и определений. В программе эти слова...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
21.12.2013, 16:38     Чтение из файла #2
Тангенс, в массиве структур 5 элементов?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 16:40     Чтение из файла #3
Цитата Сообщение от Тангенс Посмотреть сообщение
list[i] - это массив структур
Какой размер массива?
Тангенс
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 121
21.12.2013, 16:46  [ТС]     Чтение из файла #4
вообще у меня строк 7. в list[7] - стоит
в n - тоже что и в list, 7 стоит
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 16:54     Чтение из файла #5
Дайте больше кода. В файле, в конце последней строки, '\n' есть?

Добавлено через 1 минуту
И файл, с которым пробуете.
Тангенс
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 121
21.12.2013, 17:05  [ТС]     Чтение из файла #6
Весь код:

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
#include <iostream>
#include <conio.h>
#include <cstring>
#include <ctime>
 
using namespace std;
 
char buf[42];
int n=7;
 
struct stud{
    char surname[12];
    char name[12];
    char sec_name[12];
    char year[4];
}list[7];
 
void f_open(){
    FILE *file;
 
    file = fopen("info.txt","rt");
 
    if(file == NULL){
        system("pause");
    }
 
    int i=0;
    while(!feof(file)){
 
        fscanf(file,"%s\n",buf);
        
        char *point = strchr(buf,';');
 
        strncpy(list[i].surname,buf, point-buf);
        list[i].surname[point-buf]=0;
 
 
        char *n = point + 1;
        point = strchr(point+1,';');
 
        strncpy(list[i].name, n,point - n);
        list[i].name[point - n]=0;
 
 
        char *s_n = point + 1;
        point = strchr(point+1,';');
 
        strncpy(list[i].sec_name, s_n,point-s_n);
        list[i].sec_name[point-s_n]=0;
 
 
        char *year = point + 1;
        point = strchr(point+1,';');
 
        strncpy(list[i].year, year,point-year);
        list[i].year[point-year]=0;
        
        list[i].year;
 
        i++;
    }
 
    fclose(file);
 
    for(int i=0;i<n;i++){
        age[i] = atoi(list[i].year);
    }
 
}
 
int main(){ 
    
    setlocale(LC_ALL, "Russian");
    
    f_open();
 
    _getch();
    return 0;
}
Сод. файла
Анаша;Наталья;Евгенивна;1996;1;Ж
Лизун;Паша;Вальеревич;1997;2;М
Глубокий;Артем;Игоревич;1997;3;М
Анаша;Наталья;Евгенивна;1996;1;Ж
Лизун;Паша;Вальеревич;1997;2;М
Глубокий;Артем;Игоревич;1997;3;М
Анаша;Наталья;Евгенивна;1996;1;Ж
Лизун;Паша;Вальеревич;1997;2;М
Глубокий;Артем;Игоревич;1997;3;М
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 17:23     Чтение из файла #7
Цитата Сообщение от Тангенс Посмотреть сообщение
Весь код:
age - это что?

Добавлено через 2 минуты
На вопрос не ответили:
Цитата Сообщение от alsav22 Посмотреть сообщение
В файле, в конце последней строки, '\n' есть?
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
21.12.2013, 17:30     Чтение из файла #8
У меня все работает )
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 17:31     Чтение из файла #9
Массив под 7 структур, в файле - 9. И что хотите?

Добавлено через 49 секунд
Цитата Сообщение от programina Посмотреть сообщение
У меня все работает )
Только, наверное, не тот код, который выложен... Или не с тем содержимым в файле, которое выложено...
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
21.12.2013, 17:33     Чтение из файла #10
alsav22, да, изменила вот так
C++
int age[100];
 
for(int i=0;i<n;i++){
    sscanf(list[i].year, "%d", &age[i]);
    printf("%d\n", age[i]);
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 17:36     Чтение из файла #11
А размер массива структур (или количество структур в файле)?
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
21.12.2013, 17:38     Чтение из файла #12
Цитата Сообщение от alsav22 Посмотреть сообщение
А размер массива структур (или количество структур в файле)?
В файле 9 (без изменений), размер массива 7 (тоже без изменений)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 17:45     Чтение из файла #13
Цитата Сообщение от programina Посмотреть сообщение
В файле 9 (без изменений), размер массива 7 (тоже без изменений)
И вы считаете, что всё нормально? В студии из-за этого исключение вбрасывается (и правильно делается).
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
21.12.2013, 18:14     Чтение из файла #14
Цитата Сообщение от alsav22
Цитата Сообщение от programina
В файле 9 (без изменений), размер массива 7 (тоже без изменений)
И вы считаете, что всё нормально? В студии из-за этого исключение вбрасывается (и правильно делается).
.

Добавлено через 1 минуту
Дело в том, что если читать из файла только 7 строчек из 9, то ничего страшного не будет. )
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 18:26     Чтение из файла #15
Цитата Сообщение от programina Посмотреть сообщение
если читать из файла только 7 строчек из 9
Если... Я про это:
Цитата Сообщение от programina Посмотреть сообщение
У меня все работает )
Вы не писали, что функцию чтения из файла меняли:
Цитата Сообщение от programina Посмотреть сообщение
да, изменила вот так Код C++int age[100];
for(int i=0;i<n;i++){
* * sscanf(list[i].year, "%d", &age[i]);
* * printf("%d\n", age[i]);
}
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
21.12.2013, 18:31     Чтение из файла #16
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
что функцию чтения из файла меняли
не меняла. Просто сколько не запускай программу, но если там выход за пределы массива не очень большой, то ничего страшного не случится.
Кликните здесь для просмотра всего текста

C++
#include <iostream>
#include <cstdio>
#include <cstring>
#include <ctime>
 
using namespace std;
 
char buf[42];
int n=7;
 
struct stud{
    char surname[12];
    char name[12];
    char sec_name[12];
    char year[4];
}list[7];
 
 
void f_open()
{
    FILE *file = fopen("info.txt","rt");
 
    int i=0;
 
    while(!feof(file))
    {
        fscanf(file,"%s\n",buf);
 
        char *point = strchr(buf,';');
 
        strncpy(list[i].surname,buf, point-buf);
        list[i].surname[point-buf]=0;
 
 
        char *N = point + 1;
        point = strchr(point+1,';');
 
        strncpy(list[i].name, N,point - N);
        list[i].name[point - N]=0;
 
 
        char *s_n = point + 1;
        point = strchr(point+1,';');
 
        strncpy(list[i].sec_name, s_n,point-s_n);
        list[i].sec_name[point-s_n]=0;
 
 
        char *year = point + 1;
        point = strchr(point+1,';');
 
        strncpy(list[i].year, year,point-year);
        list[i].year[point-year]=0;
 
        i++;
    }
 
    fclose(file);
 
    int age[100];
 
    for(int i=0;i<n;i++){
        sscanf(list[i].year, "%d", &age[i]);
        printf("%d\n", age[i]);
    }
}
 
int main(){ 
    
    f_open();
 
    return 0;
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 19:32     Чтение из файла #17
Цитата Сообщение от programina Посмотреть сообщение
но если там выход за пределы массива не очень большой, то ничего страшного не случится.
Может не случится, может случится... Ошибка у ТС из-за чего?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2013, 19:40     Чтение из файла
Еще ссылки по теме:

Чтение из файла - C++
Есть задание: написать программу,которая считывыает числа из файла, написанные в нем через пробел. Числа кодируются и записываются в новый...

чтение файла - C++
как прочитать файл в динамический массив? для обычного я делал так: char S ; file.Read (S, 300); теперь S - динамический...

Чтение из файла - C++
Добрый вечер! Помогите пожалуйста с одной проблемкой! Я Создала структуру node Вот он: struct node { char sym; float pro; ...

Чтение из файла - C++
Подскажите как вывести на экран содержимое файла на Си, если данные разделены &quot;;&quot;. Файл имеет вид: 1;23233233;1234-43;иванов...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 19:40     Чтение из файла #18
При запуске из командной строки вообще ничего не выводит. При запуске из студии, результат на скрине.
Миниатюры
Чтение из файла  
Yandex
Объявления
21.12.2013, 19:40     Чтение из файла
Ответ Создать тему
Опции темы

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