Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
cybernetics
2 / 2 / 3
Регистрация: 10.04.2013
Сообщений: 42
#1

Некорректность работы программы при считывании текстовых данных с файла - C++

13.04.2013, 23:26. Просмотров 354. Ответов 3
Метки нет (Все метки)

Здравствуйте!)
Помогите, пожалуйста, решить данную проблему...
http://www.cyberforum.ru/cpp-beginners/thread1335535.html
Почему при следующем варианте кода, программа просто-напросто не работает и вылетает. В чём ошибка при считывании? Подскажите, пожалуйста

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "stdafx.h"
#include "iostream"
#include <fstream>
#include <conio.h>
#include <string>
#include <locale.h>
 
using namespace std;
 
struct university
{
    string first_name;
    string second_name;
    string patronymic;
    string group;
    string dopusk;
    unsigned short mark;
    unsigned short kurs;
};
 
int main()
{
 
    setlocale(LC_ALL, "Rus");
    cout <<"=============================Вариант №1.========================================\n\n";
    cout << "=======В файле записана вся необходимая информация о студентах.=================\n\n";
    cout << "\nЧтобы вывести на экран ФИО студентов, недопущенных к сессии, нажмите 1...";
    cout << "\nЧтобы вывести на экран ФИО отличников, нажмите 2...";
    cout << "\nЕсли Вы хотите вывести на экран фамилии студентов с отчеством (по запросу), нажмите 3...";
    int i=0, n=0;
    //===================================================================================================
 
    string ss="123";
    
    FILE *f_in, *f_out;
    char *name1="D:\\ОНПУ\\info.txt";
    if ((f_in=fopen(name1, "r"))==NULL)
    {
        perror ("Ошибка в чтении файла.\nПроверьте его целостность и повторите попытку.\n");
    }
    else 
    { 
        fscanf (f_in, "%i", &n);    
        cout << endl << n<<endl;
        university *un = new university[n];
        while (!feof(f_in))
        {   
            if (feof(f_in)) break;
            fscanf (f_in, "%s", &un[i].first_name);
            /*
            fscanf (f_in, "%s", &un[i].second_name);
            fscanf (f_in, "%s", &un[i].patronymic);
            fscanf (f_in, "%s", &un[i].group);
            fscanf (f_in, "%s", &un[i].dopusk);
            fscanf (f_in, "%d", &un[i].mark);
            fscanf (f_in, "%d", &un[i].kurs);*/
            i++;
            
        }
 
    }
    //cout << un[1].first_name << endl;                     //некорректный вывод
    //cout << un[1].dopusk;
 
    //=====================================================================================================
    cout<<endl;
 
    fclose(f_in);
    /*
a1:
    cin>>n;
 
    switch (n)
    {
    case 1:
        {
 
        }
    case 2:
        {
 
        }
    case 3:
        {
 
        }
    default: 
        {
            cout << "Ошибка выбора операции. Повторите попытку!\n";
            goto a1;
        }
    }
 
    //=====================================================================================================
 
 
 
 
    */
    cout <<"\n\n\n\n\n\n";
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2013, 23:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Некорректность работы программы при считывании текстовых данных с файла (C++):

При считывании данных из файла дописываются лишние симолы
Здравствуйте. Пишу класс для работы с файлами на базе winapi. Столкнулся с...

Переполнение при считывании из файла
Подскажите пожалуйста, где ошибка, вот код чтения из файла: void...

Проблема при считывании из файла
Пишу простенькую программу по криптографии. В результате шифрования получается...

Лишние символы при считывании файла
Считываю структуру с файла и вывожу в консоль, при выводе появляются лишние...

Переполнение строки при считывании из файла
Считываю я строки из файла, в котором их 500 тысяч. Если строка начинается на...

3
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,907
Записей в блоге: 3
Завершенные тесты: 1
14.04.2013, 19:39 #2
C++
1
fscanf (f_in, "%s", &un[i].first_name);
Берете адрес объекта типа string, а не адрес буфера для символов.
0
cybernetics
2 / 2 / 3
Регистрация: 10.04.2013
Сообщений: 42
14.04.2013, 20:28  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
fscanf (f_in, "%s", &un[i].first_name);
Берете адрес объекта типа string, а не адрес буфера для символов.
Подробнее, пожалуйста
0
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,907
Записей в блоге: 3
Завершенные тесты: 1
14.04.2013, 23:44 #4
Цитата Сообщение от cybernetics Посмотреть сообщение
Подробнее, пожалуйста
А как тут подробнее?
Вы же не с массивом символов работаете, а с объектом. И берете адрес этого объекта.

У Вас такая ситуация:
Некорректность работы программы при считывании текстовых данных с файла
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 23:44
Привет! Вот еще темы с решениями:

Разъясните ошибки при считывании файла
не пойму что от меня требуется тут) пол года изучаем язык) часть ошибок...

Сбивается указатель при считывании из файла
Сбивается указатель, считывается не то значение (вместо '1' считывается пробел...

Ошибка при считывании двоичного файла
При считывании из .EXE файла возникает ошибка, а возникает она когда...

Ошибка, при считывании инфы с файла...
Вот есть код:#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt;...


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

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

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