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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
lav88
2 / 2 / 0
Регистрация: 29.01.2010
Сообщений: 59
#1

Надо чтобы, как только встречаются данные о женщине, программа преуменьшала ее возраст - C++

05.06.2011, 21:17. Просмотров 2084. Ответов 19
Метки нет (Все метки)

Имеется структура с полями фио, пол и возраст, место работы. Мне надо что бы как только встречаются данные о женщине программа преуменьшала ее возвраст. Как можно по полю пол сделать, что бы программа определяла мужчина это или женщина? (поле пол у меня типа char и все данные у меня считываются из txt файла)

Добавлено через 4 часа 20 минут
Ну что может кто-нибудь помочь мне?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2011, 21:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Надо чтобы, как только встречаются данные о женщине, программа преуменьшала ее возраст (C++):

Имеется N мужчин и N женщин. Имеются также данные о предпочтениях каждого мужчины к каждой женщине. - C++
Имеется N мужчин и N женщин. Имеются также данные о предпочтениях каждого мужчины к каждой женщине. Аналогичные данные имеются и...

Имеется N мужчин и N женщин. Имеются также данные о предпочтениях каждого мужчины к каждой женщине. - C++
Имеется N мужчин и N женщин. Имеются также данные о предпочтениях каждого мужчины к каждой женщине. Аналогичные данные имеются...

Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна - C++
Написал простенький кликер на с++, который в игре нажимает кнопочки от 1 до 9, сделал зависимости нажатия кнопочек от того что происходит...

Нужно выяснить, какие символы встречаются в обеих строках, так же и те, которые встречаются только в одной - C++
Вводим две строки символов. Нужно выяснить, какие символы встречаются в обеих строках, так же и те, которые встречаются только в одной....

Программа считывает только первую строку файла,как сделать чтобы она считывала все строки - C++
#include <fstream> #include <iostream> using namespace std; int main(int argc, char* argv) { setlocale(LC_ALL, "rus"); ...

Что надо изменить, чтобы данные отправлялись на сервер только при положительном прохождении проверки? - JavaScript
Имеется функция TestData(), проверяющая корректность введенных в форму данных и возвращающая значение true/false. Что надо изменить в...

19
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
05.06.2011, 22:00 #2
А что собственно сложного-то?
допустим структуру:
C++
1
2
3
4
5
6
7
struct men
{
char* name;
int age;
char sex;
char* work;
}
Бонально проверяем пол( w - женский, m - мужской), если w то отнимаем возраст ...:
C++
1
2
3
4
men Janna;
//считываются данные с файла...
if (Janna.sex == 'w')
    cout<<Janna.age-3;
В чём проблема?
Либо я что-то не так понял?
0
lav88
2 / 2 / 0
Регистрация: 29.01.2010
Сообщений: 59
05.06.2011, 22:19  [ТС] #3
я так и делал примерно, но он у меня на эту строчку ругается постоянно
if(spisok[x].sex == 'w')
вот этому я спрашиваю, то что может делаю что то не то

Добавлено через 4 минуты
а когда эту же строчку меняю, что бы он выбор делал по возрасту
if(spisok[x].age>40)
то все работает и никак я не могу понять что не так
0
lav88
2 / 2 / 0
Регистрация: 29.01.2010
Сообщений: 59
06.06.2011, 21:00  [ТС] #4
после некоторых изменений программа все же перестала ругаться на ту строчку и пытается запуститься, но теперь выходит такая ошибка
вот код моей программы, сейчас я пытаюсь, что бы он просто выбирал женщин, а потом уж сделаю уменьшение их возрвста
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
#include <stdio.h>
#include <conio.h>
main(){
//clrscr;
struct sotrudniki {
int nomer;
char fam[15];
char name[15];
char patronymic[15];
char sex;
int age;
}
spisok[10];
FILE *infile,*outfile;
infile=fopen("D:\spisok.txt","r");
if (infile==NULL){
printf("osibka\n");
getchar();
return(0);}
outfile=fopen("D:\spisok2.txt","w");
int x=-1;
char c,c1[50];
 
while (!feof(infile)){
x++;
fscanf(infile,"%d%s%s%s%s%d\n",&spisok[x].nomer,&spisok[x].fam,
&spisok[x].name,&spisok[x].patronymic,&spisok[x].sex,&spisok[x].age);
}
printf("\spisok:\n");
x=0;
while(x!=10){
printf("%2d %14s %10s %15s %3s %3d\n",spisok[x].nomer,spisok[x].fam,
spisok[x].name,spisok[x].patronymic,spisok[x].sex,spisok[x].age);
x++;}
printf("women\n");
x=0;
while(x!=10){
    if(spisok[x].sex=='w')
    {
printf("%2d %14s %10s %15s %3s %3d\n",spisok[x].nomer,spisok[x].fam,
spisok[x].name,spisok[x].patronymic,spisok[x].sex,spisok[x].age);
fprintf(outfile,"%2d %14s %10s %15s %3s %3d\n",spisok[x].nomer,spisok[x].fam,
spisok[x].name,spisok[x].patronymic,spisok[x].sex,spisok[x].age);
}
x++;}
 
fclose(outfile);
getchar();
}
0
Миниатюры
Надо чтобы, как только встречаются данные о женщине, программа преуменьшала ее возраст  
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
06.06.2011, 23:04 #5
Цитата Сообщение от lav88 Посмотреть сообщение
я так и делал примерно, но он у меня на эту строчку ругается постоянно
if(spisok[x].sex == 'w')

Не по теме:

Ругается на секс с женщиной?
Вы женщина?


Тут, возможно, пол ещё не был символьной переменной...

C
1
2
fscanf(infile,"%d%s%s%s%s%d\n",&spisok[x].nomer,&spisok[x].fam,
&spisok[x].name,&spisok[x].patronymic,&spisok[x].sex,&spisok[x].age);
Для fam, name и patronymic оператор & использовать не надо, так как это уже указатели.
А раз sex переменная, а не массив, то, наверное, для неё нужен шаблон %c

Добавлено через 2 минуты
И чтобы обратный слеш в строке воспринимался именно как обратный слеш, его надо бы удваивать.
0
lav88
2 / 2 / 0
Регистрация: 29.01.2010
Сообщений: 59
14.06.2011, 02:47  [ТС] #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
// 2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
int main(array<System::String ^> ^args)
{
    struct sotrudniki {
int nomer;
char fam[15];
char name[15];
char patronymic[15];
char sex;
int age;
}
 
spisok[10];
FILE *infile,*outfile;
infile=fopen("f:\spisok.txt","r");
if (infile==NULL){
printf("osibka\n");
getchar();
return(0);
}
outfile=fopen("f:\spisok2.txt","w");
int x=-1;
char c,c1[50];
 
while (!feof(infile)){
x++;
fscanf(infile,"%d %s %s %s %c %d\n",&spisok[x].nomer,spisok[x].fam,
spisok[x].name,spisok[x].patronymic,&spisok[x].sex,&spisok[x].age);
}
printf("\spisok:\n");
x=0;
while(x < 10){
printf("%2d %14s %10s %15s %3c %3d\n",spisok[x].nomer,spisok[x].fam,
spisok[x].name,spisok[x].patronymic,spisok[x].sex,spisok[x].age);
x++;}
printf("posle ymen'sheniya vozvrasta woman\n");
x=0;
while(x < 10){
    if(spisok[x].sex=='w')
    {
 spisok[x].age=spisok[x].age-15;
}
printf("%2d %14s %10s %15s %3c %3d\n",spisok[x].nomer,spisok[x].fam,
spisok[x].name,spisok[x].patronymic,spisok[x].sex,spisok[x].age);
fprintf(outfile,"%2d %14s %10s %15s %3c %3d\n",spisok[x].nomer,spisok[x].fam,
spisok[x].name,spisok[x].patronymic,spisok[x].sex,spisok[x].age);
x++;}
for(int i = 0; i < x; i++)     
printf("%3d",spisok[i].age);
for(int i = 0; i < x; i++){
      for(int j = 0; j <=i; j++)
       {
             if(spisok[j].age < spisok[j+1].age)
           {
                 int foo = spisok[j].age;
                      spisok[j].age = spisok[j+1].age;
                       spisok[j+1].age = foo;
          }
            
      }
      
}
printf("\n");
for(int j = 0; j < x; j++)  
   printf("%2d %14s %10s %15s %3c %3d\n",spisok[j].nomer,spisok[j].fam,
spisok[j].name,spisok[j].patronymic,spisok[j].sex,spisok[j].age);
   
fclose(outfile);
getchar();
    return 0;
}
Добавлено через 3 часа 26 минут
почему я не могу произвести акую операцию spisok[j].name = spisok[j+1].name;
выдает ошибку error C2106: =: левый операнд должен быть левосторонним значением
как ее можно исправить?
0
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
14.06.2011, 02:54 #7
Цитата Сообщение от lav88 Посмотреть сообщение
почему я не могу произвести акую операцию spisok[j].name = spisok[j+1].name;
выдает ошибку error C2106: =: левый операнд должен быть левосторонним значением
как ее можно исправить?
Потому, что это массив. Раз там ASCIIZ-строка, то поможет функция strcpy. Для массивов общего вида потребуется memcpy (или memmove)

Добавлено через 3 минуты
Правда вместо strcpy правильнее пользоваться только её безопасной версией strncpy
0
tylix
14.06.2011, 03:04
  #8

Не по теме:


Какой хороший прогмер, все девушки будут его любить... Они вводят что им 30, а прога раз, и омолаживает на лет так 10 )

0
lav88
2 / 2 / 0
Регистрация: 29.01.2010
Сообщений: 59
14.06.2011, 09:07  [ТС] #9
а можете показать на коде как функцией strcpy пользоваться?
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.06.2011, 09:14 #10
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <cstring>
int main(){
    char s1[]="qwerty",s2[strlen(s1)];
    strcpy(s2,s1);
    std::cout << s2;
    return 0;
}
Добавлено через 32 секунды
Либо так
C++
1
2
3
4
5
6
7
#include <iostream>
#include <cstring>
int main(){
    char s1[]="qwerty",s2[strlen(s1)];
    std::cout << strcpy(s2,s1); //s2 при этом изменяется
    return 0;
}
0
lav88
2 / 2 / 0
Регистрация: 29.01.2010
Сообщений: 59
14.06.2011, 09:21  [ТС] #11
а как мне сделать с помощью него, что бы 2 текстовых массива поменялись месами(а не олько что бы один заменился другим)?
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.06.2011, 09:28 #12
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cstring>
int main(){
    char s1[]="qwerty",s2[]="abcdef",s3[strlen(s1)];
    strcpy(s3,s1);
    strcpy(s1,s2);
    strcpy(s2,s3);
    std::cout << s1 << std::endl << s2; 
    return 0;
}
1
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
14.06.2011, 09:40 #13
diagon, хммм, а вот размер s3 разве не должен быть strlen(s1)+1? Там же ещё под нуль-символ место нужно.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
14.06.2011, 09:44 #14
В случае с обычным свапом это не критично вроде...
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cstring>
int main(){
        char s1[]="qwerty",s2[]="abcdef",s3[strlen(s1)];
        strcpy(s3,s1);
        strcpy(s1,s2);
        strcpy(s2,s3);
        std::cout << (int) s1[strlen(s1)] << ' ' << (int) s1[strlen(s1)];
        return 0;
}
В g++ вывод: 0 0
Т.е. в концах строк стоят нули. И свапаются нормально.
Хотя на всякий случай лучше давать место под нуль, тут согласен.
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
14.06.2011, 10:16 #15
очень сомнительно, что первый вариант рабочий. Размер массива должен быть известен на момент компиляции, то есть должно быть константное выражение
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2011, 10:16
Привет! Вот еще темы с ответами:

надо составить программу вычисления стоимости заказа на жалюзи.ПРедусмотреть чтобы пользователь мог ввести только числовые данные - Delphi
где не видно там стоимость кв.м)

Данные, которые встречаются только 1 раз - MySQL
Всем привет. Столкнулся с проблемой. Имеется некая база данных. Делая запрос, я получаю таблицу которая приведена ниже. Так вот, мне надо...

Как редактировать .sql-файл, чтобы им вставлять данные в БД, а не только структуру таблиц? - MySQL
У меня есть .sql-файл ~9 мегабайт, я отправляю его в phpMyAdmin на импорт, он успешно импортируется, но создаётся только структура таблиц,...

Как сделать чтобы разные пользователи получали данные из бд только для них - PHP
Добрый день. Вопрос такой возник, вот у меня есть php страница которая получает набор данных из бд(из таблицы). Как можно сделать так,...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
14.06.2011, 10:16
Ответ Создать тему
Опции темы

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