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

Структуры. Неправильно считывает строку - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Выход из программы http://www.cyberforum.ru/cpp-beginners/thread963383.html
Возможно, глупый вопрос, но как сделать выход из программы? Хочется сделать закрытие программы не из главной функции. К примеру: #include "stdafx.h" void func() { //выход из программы. Что-то вроде Application->exit(); } int _tmain(int argc, _TCHAR* argv) {
C++ Доброй ночи форумчане! Не могу изменить программу для добавочного условия Первое условие было составить двусвязный список из случайных чисел, оно выполнено.Теперь нужно Найти произведение 2-ого и последнего элемента двусвязного списка.#include <stdlib.h> #include <iostream> #include "stdafx.h" #include <iostream> #include <conio.h> #include <stdio.h> #include <fstream> #include<time.h> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread963379.html
C++ поправьте меня (Определите, сколько различных слов содержится в тексте)
Во входном файле (вы можете читать данные из файла input.txt) записан текст. Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки. Определите, сколько различных слов содержится в этом тексте. #include <iostream> #include<set> #include<string> using namespace std; int main(int args, char*...
поиск нечетных пар C++
Подскажите пожалуйста, нужно в массиве перебирая парами элементы найти все неченые пары и увеличить их на 1. void Vect::func() {int i=0; for (i=0;i<=dim;i++) { if(v%2!=0) { if (v%2!=0) {v=v+1; v=v+1;
C++ Протабулировать функцию (ряд Тейлора) С++ http://www.cyberforum.ru/cpp-beginners/thread963375.html
Нужно протабулировать функцию, заданную расписанием в ряд Тейлора(см. ниже), в области ее определения на отрезке от А до Б (количество шагов не менее 100000)... Помогите реализовать в С++Builder... Башка не варит, а времени нету... Буду благодарен
C++ Интеграл Подскажите. Как написать интеграл на C++. Мне нужно написать прогу, што б искала наближене значение функции y=f(x), используя розклад у ряд Тейлора подробнее

Показать сообщение отдельно
Sselicrem
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 9

Структуры. Неправильно считывает строку - C++

27.09.2013, 03:19. Просмотров 387. Ответов 1
Метки (Все метки)

Само задание:
В текстовом файле хранится база отдела кадров предприятия. Каждая строка файла содержит запись об одном сотруднике. Формат записи: фамилия и инициалы (не более 30 поз., фамилия должна начинаться с первой позиции), год рождения (не более 5 поз.), оклад (не более 10 поз.). Написать программу, которая по заданной фамилии выводит на экран сведения о сотруднике, подсчитывая средний оклад всех запрошенных сотрудников.

Неправильно считывает данные - всю строку забивает в имя.

Пример строк из файла:
Petrov 1654 123123
Ivanov 12124 323425

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
// 
 
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
 
#pragma warning ( disable : 4996 )
 
using namespace std;
 
int main(){
 
    setlocale(LC_ALL,"RUS");
  const int l_name = 30, l_year = 5, l_pay = 10, 
 
      l_buf = l_name + l_year + l_pay;                  
 
  
 
  struct Man {                                        
 
    int birth_year; 
 
    char name[l_name + 1];
 
    float pay;
 
  };
 
  const int l_dbase = 100;
 
  Man dbase[l_dbase];                                   
 
  
 
  char buf [l_buf + 1];                                 
 
  char name[l_name + 1];                                
 
  
 
  ifstream fin("dbase.txt", ios::in);   
 
if (!fin) { cout << " Ошибка открытия файла "; return 1; }
 
  
 
  int i = 0;
 
  while (fin.getline(buf, l_buf)) {                   
 
    if (i >= l_dbase) { cout << " Слишком длинный файл "; return 1; }
 
   strncpy(dbase[i].name, buf, l_name);
 
    dbase[i].name[l_name] = '\0';
 
    dbase[i].birth_year = atoi(&buf[l_name]);
 
    dbase[i].pay = atof(&buf[l_name + l_year]);
 
    i++;
 
  }
 
  int n_record = i, n_man = 0;                          
 
  float mean_pay = 0;
 
        while (true) 
        { 
 
            cout << " Введите фамилию или слово end: "; cin >> name;
 
            if (strcmp(name, "end") == 0 )break;
 
            bool not_found = true;
            for (i = 0; i < n_record; i++) 
            { 
                if (strstr(dbase[i].name, name))
                if (dbase[i].name[strlen(name)] == ' ')
                { 
                    strcpy(name, dbase[i].name);
                    cout << name << dbase[i].birth_year << ' ' << dbase[i].pay << endl; 
                    n_man++; 
                    mean_pay += dbase[i].pay;
                    not_found = false;
                }
            }
            if (not_found) cout << " Такого сотрудника нет" << endl;
            
        }
    if (n_man > 0) cout << " Средний оклад: " << mean_pay / n_man <<endl;
    system("pause");
    }
Что я делаю не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru