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

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

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

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

21.12.2013, 16:06. Просмотров 444. Ответов 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);
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2013, 16:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение из файла (C++):

Переделать в коде чтение из файла в чтение с клавиатуры - C++
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...

Чтение из файла. Повторное чтение файла - C++
Добрый день. Необходимо реализовать в программе функцию повторного чтения данных из файла, в случае некорректного ввода их в оный. Вот...

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt; using namespace std; struct...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? - C++
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

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

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

Добавлено через 1 минуту
И файл, с которым пробуете.
0
Тангенс
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;М
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.12.2013, 17:23 #7
Цитата Сообщение от Тангенс Посмотреть сообщение
Весь код:
age - это что?

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

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

Добавлено через 1 минуту
Дело в том, что если читать из файла только 7 строчек из 9, то ничего страшного не будет. )
0
alsav22
5425 / 4820 / 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]);
}
0
21.12.2013, 18:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2013, 18:26
Привет! Вот еще темы с ответами:

чтение из файла - C++
Помогите переделать этот код C++ на Паскаль /*wwod dannuh iz faila*/ FILE *fp; fp=fopen(&quot;NachDann.txt&quot;,&quot;r&quot;); ...

Чтение из файла. - C++
Здравствуйте. Учусь языку С++. Отказываюсь напрочь понимать как в оконном приложении осуществить чтение из файла с условием, что мне...

чтение файла - C++
Как реализовать след.: считывать файл до определённого символа?

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


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

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

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