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

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

Восстановить пароль Регистрация
 
Тангенс
1 / 1 / 0
Регистрация: 19.07.2013
Сообщений: 121
21.12.2013, 16:06     Чтение из файла #1
В файле хранится 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++
Чтение из файла. C++
C++ Чтение из файла
Чтение из файла C++
C++ Чтение из файла с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
21.12.2013, 16:38     Чтение из файла #2
Тангенс, в массиве структур 5 элементов?
alsav22
5282 / 4801 / 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
5282 / 4801 / 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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 17:23     Чтение из файла #7
Цитата Сообщение от Тангенс Посмотреть сообщение
Весь код:
age - это что?

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

Добавлено через 49 секунд
Цитата Сообщение от programina Посмотреть сообщение
У меня все работает )
Только, наверное, не тот код, который выложен... Или не с тем содержимым в файле, которое выложено...
programina
 Аватар для programina
1912 / 597 / 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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 17:36     Чтение из файла #11
А размер массива структур (или количество структур в файле)?
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
21.12.2013, 17:38     Чтение из файла #12
Цитата Сообщение от alsav22 Посмотреть сообщение
А размер массива структур (или количество структур в файле)?
В файле 9 (без изменений), размер массива 7 (тоже без изменений)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 17:45     Чтение из файла #13
Цитата Сообщение от programina Посмотреть сообщение
В файле 9 (без изменений), размер массива 7 (тоже без изменений)
И вы считаете, что всё нормально? В студии из-за этого исключение вбрасывается (и правильно делается).
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
21.12.2013, 18:14     Чтение из файла #14
Цитата Сообщение от alsav22
Цитата Сообщение от programina
В файле 9 (без изменений), размер массива 7 (тоже без изменений)
И вы считаете, что всё нормально? В студии из-за этого исключение вбрасывается (и правильно делается).
.

Добавлено через 1 минуту
Дело в том, что если читать из файла только 7 строчек из 9, то ничего страшного не будет. )
alsav22
5282 / 4801 / 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
 Аватар для programina
1912 / 597 / 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
5282 / 4801 / 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++
Чтение из Файла C++

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

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

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