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

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

Войти
Регистрация
Восстановить пароль
 
evelolka
2 / 2 / 0
Регистрация: 25.10.2013
Сообщений: 108
#1

Разъясните ошибки при считывании файла - C++

02.05.2014, 14:27. Просмотров 303. Ответов 2
Метки нет (Все метки)

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

Разъясните ошибки при считывании файла
Разъясните ошибки при считывании файла
Разъясните ошибки при считывании файла

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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#include < Windows.h >
#include < stdio.h >
#include < clocale >
#include < conio.h >
#include < iostream >
using namespace std;
struct WORKER
    {
        char family[20], name[20], dolzhnost[20];
        int god;
        WORKER * next;
    };
    WORKER * head = 0;
    WORKER * current = 0;
    char c;
    int schetchik = 0;
    int schetchik_goda =0;
    int sred_god =0;
int main()
{
    setlocale(LC_ALL,"RUS");
   SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
   SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
    printf_s("ввести данные ?( д ) или считать из файла? ( с )\n");
    c = _getche();
    
    if( c == 'с')
    {
        char file[100];
        printf_s("\nВведите адрес файла\n");
        gets_s( file );
        FILE * read;
        fopen_s( &read , file , "a+" );
        if(read==NULL)
            printf_s("Ошибка при открытии");
        else
            while( !feof( read ) )
            {
                if(fgetc( read ) == EOF)
                    printf("\n А файл то пуст \n");
                else
                fscanf_s( read,"%15p%15p%15p%15i",current->name,current->family,current->dolzhnost,current->god );
            };
            fclose(read);
    }
 
    if( c == 'д')
    {
        while(c == 'д')
        {
            schetchik++;
            if (head != 0) 
                { 
                    current -> next = new WORKER; 
                    current = current -> next; 
                }
            else     
                { 
                    head = new WORKER; 
                    current = head;   
                }
 
            cout<<"\nВведите имя\n";
            cin >> current -> name;
            cout << "Введите фамилию\n";
            cin >> current -> family;
            cout << "Введите должность\n";
            cin >> current -> dolzhnost;
            cout << "Введите год поступления на работу\n";
            cin >> current -> god;
            schetchik_goda += current -> god;
            current -> next = 0;
            cout << "Ввести данные?(да/нет)\n";
            c = _getche();
        }
 
    
    //////////////////////////////////////сортировка  по году принятия на работу////////////////////////////////////////////////////////////
    bool stop = true;   // продолжение сортировки
 WORKER *prev = 0;        // адрес пердыдущего
 
 current = head;
 while( stop )
 {
     stop = false ;
     current = head ;
     
     while( current != 0 )
     {
         if( current -> next !=0 && ( current -> god > current -> next -> god ) )
         {
             if( current == head )           // если первый - меняем первый элемент на последующий
             {
                 head = head -> next ;
                 current -> next = head -> next ;
                 head -> next = current ;
                 prev = head ;             // станет предыдущим для следующей итерации...
             }
      else                    // иначе ЕСЛИ за ним идет последний - меняем элемент с последним
      if( current -> next -> next == 0 )
      {
       current -> next -> next = current ;
       prev -> next = current -> next ;
       current -> next = 0 ;          // фактически выйдем из цикла
      }
      else                    // инача промежуточный элемент
      {
       prev -> next = current -> next ;
       current -> next = current -> next -> next ;
       prev -> next -> next = current;
 
       prev = prev -> next ;    
      }
 
      stop = true ;           // т.к. заменаа прошла, то возможно будут еще... разрешаем цикл дальше
     }
     else                     // если критерий замены не прошел - сохнаняем предыдущий и переходим к следующему
     {
      prev = current ;
      current = current -> next ;
     }
 
   }
 }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    if( head != 0 )
    {
        printf("\n _______________________________________________________________\n");
            printf("\n|Имя            |Фамилия        |Должность      |Год поступления|\n");
            printf(" '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''\n");
        current = head;
        while( current != 0 )
        {
            printf("\n|%15s|%15s|%15s|%15i|\n", current -> name , current -> family , current -> dolzhnost , current -> god );
            printf(" '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''\n");
            current = current -> next;
        };
    }
    else
        printf("Ничего не введено\n");
 
 
 
/////////////////////////фамилии тех, чей стаж меньше среднего//////////////////////////////////////////////////////////////////////////
    sred_god = schetchik_goda / schetchik;
    current = head;
    printf("\n\n                    Стаж работы ниже среднего                       ");
            printf("\n _______________________________________________________________\n");
            printf("\n|Имя            |Фамилия        |Должность      |Год поступления|\n");
            printf(" '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''\n");
    while(current != 0)
    {
        if(current -> god > sred_god)
        {
            printf("|%15s|%15s|%15s|%15i|\n", current -> name , current -> family , current -> dolzhnost , current -> god );
            current = current -> next;
        }
        else
            current = current -> next;
    }
//////////////////////////////////////////////////////Вывод в файл//////////////////////////////////////////////////////////////////////////
    FILE*out;
    char filename[100];
    strcpy_s(filename,"c:/Users/zzz/Desktop/lab.txt");
    fopen_s(&out,filename,"w+");
        if( head != 0 )
        {
            current = head;
            fprintf(out , "\n _______________________________________________________________\n");
                    fprintf(out , "\n|Имя            |Фамилия        |Должность      |Год поступления|\n");
                    fprintf(out , " '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''\n");
            while( current != 0 )
                {
                    
                    fprintf(out , "|%15s|%15s|%15s|%15i|\n", current -> name , current -> family , current -> dolzhnost , current -> god );
                    fprintf(out , " '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''\n");
                    current = current -> next;
                };
        }
    else
        fprintf( out , "Ничего не введено\n" );
    fclose(out);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    }
system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2014, 14:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разъясните ошибки при считывании файла (C++):

Ошибки при считывании строки из файлы - C++
Добрый вечер. Бьюсь с этой проблемой уже не первый день. Но вразумительно ответа в интернете так и не нашел. В программе нужно считать...

Проблема при считывании из файла - C++
Пишу простенькую программу по криптографии. В результате шифрования получается txt файлик с набором закорючек(он во вложении). Для...

Переполнение при считывании из файла - C++
Подскажите пожалуйста, где ошибка, вот код чтения из файла: void read_file(void) { int mass; FILE* file = fopen(&quot;arr.txt&quot;, &quot;r&quot;); ...

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

Лишние биты при считывании файла - C++
Нужно порциями по 63 байта считать текст из файла. &quot;in&quot; - мой открытый файл для чтения. Вот отрывок из кода fseek(in, 0, SEEK_END); ...

Ошибка при считывании двоичного файла - C++
При считывании из .EXE файла возникает ошибка, а возникает она когда считываемый байт равен 0x1A. Если он есть в файле то программа &quot;видит&quot;...

2
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
02.05.2014, 15:08 #2
Первая и третья картинка - попробуй добавить проверку на нулевой указатель, вдруг поможет (у меня другая версия студии, не сталкивалась с этим);
Вторая картинка - у тебя в fscanf %p. %p - прочитать адрес из файла в указатель. Ты же строки читаешь, а не адреса.
0
evelolka
2 / 2 / 0
Регистрация: 25.10.2013
Сообщений: 108
02.05.2014, 15:10  [ТС] #3
про %p на это студия ругалась при анализе когда я %s ставил)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2014, 15:10
Привет! Вот еще темы с ответами:

Сбивается указатель при считывании из файла - C++
Сбивается указатель, считывается не то значение (вместо '1' считывается пробел и всё летит). Но если открыть этот файл в WordPad'e добавить...

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

Конец файла при потоковом считывании - C++
if (fin.eof()==0){ cout &lt;&lt; &quot;aaa&quot;; int asa; asa = (int)buf; fout.write((char*)buf, sizeof(buf - asa)); } вот...

Переполнение строки при считывании из файла - C++
Считываю я строки из файла, в котором их 500 тысяч. Если строка начинается на R, то я записываю её в другой файл. Примерно на 312000-й...


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

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

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