Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
1

Не совместимость типа

27.07.2009, 19:03. Просмотров 769. Ответов 11
Метки нет (Все метки)

После написания программы программы у меня возникла проблема связанная скорее всего с соответствием типов друг другу, при этом case'2' работает прекрасно, а case'1' не ишет требуемое значение. Прошу просто указать где ошибка.
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
#pragma hdrstop
#include <iostream.h>
#include <string.h>
#include <set>
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{ struct Worker{
 char fio[30],dolg[15];
 int date;
 double salary;
 };
 unsigned int o;
  int f;
  char u;
  unsigned char z;
 cout<<"Ob'em spravki"<<endl;
 cin>>o;
 Worker *spis=new Worker[o],worker;
 cout<<"Vvedite Familiy,vozrost,dolgnost',salary"<<endl;
 for(unsigned int i=0;i<o;i++)
 cin>>spis[i].fio>>spis[i].date>>spis[i].dolg>>spis[i].salary;
 cout<<"--------------------------------"<<endl;
 cout<<"Spravka"<<endl;
 for(unsigned int i=0;i<o;i++){
 cout<<spis[i].fio<<" "<<spis[i].date<<" "<<spis[i].dolg<<" "<<spis[i].salary<<endl<<endl;
 }
 cout<<"Vvedite sposob poiska"<<endl;
 cout<<"1. Po dolgnosti"<<endl;
 cout<<"2. Po vozrostu"<<endl;
 cin>>u;
 switch(u)
 {case'1':{cout<<"Vvedite dolgnost'"<<endl;
           cin>>z;
           for(unsigned int i=0;i<o;i++)
           if(z==*(spis[i].dolg))
           cout<<spis[i].fio<<" "<<spis[i].date<<" "<<spis[i].salary<<endl;break;
          }
  case'2':{cout<<"Vvedite vozrost'"<<endl;
           cin>>f;
           for(unsigned int i=0;i<o;i++)
           if(f==spis[i].date)
           cout<<spis[i].fio<<" "<<spis[i].dolg<<" "<<spis[i].salary<<endl;break;
 
          default:cout<<"Ne verni znak";
            }
         }
        cin.get();
        cin.get();
        return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2009, 19:03
Ответы с готовыми решениями:

Возврат объекта шаблонного типа от типа Type из специализации шаблона метода от того же типа
Доброго времени суток, пишу класс содержащий несколько std::set от разных типов, нужно сделать...

Совместимость Delphi с процессорами типа Intel® Atom™ Z3735F, Intel® Celeron® N2840, Intel® Pentium® N3540
Всем привет, сейчас передо мной стоит вопрос выбора ноутбука, ноутбук нужен для учебы, в целом не...

Условие типа if( масив типа char[x] [y] != переменная типа char) не срабатывает
Создал функцию ChangeWay(). Все, кроме if(map !=ar) (обе переменные типа char) работает...

В динамическом одномерном массиве (типа T) записей (типа Rec) отыскать и вывести:
1. В динамическом одномерном массиве (типа T) записей (типа Rec) const n = 10; //количество...

11
576 / 570 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
27.07.2009, 19:18 2
C++
1
unsigned char z;
Если ты используешь z как символьный массив, то должен задать ей размер.
C++
1
if(z==*(spis[i].dolg))
Так сравниваются только первые символы, а вобще для сравнения строк нужно юзать strcmp
C++
1
if(strcmp(spis[i].dolg, (char *) z) == 0)
1
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
28.07.2009, 14:52  [ТС] 3
Скажите пожалуйста а как вставить в конструкцию If в 37, 43 строках чтобы если в результате того что он ничего не нашел выводил сообщение"НЕ найдено"
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
28.07.2009, 15: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
switch ( u ) {
case '1':
    cout <<"Vvedite dolgnost'" <<endl;
    cin >>z;
    int found= 0;
    for( int i= 0; i<o; i++ ) {
        if ( z == *(spis[i].dolg) ) {
            cout <<spis[i].fio <<" " <<spis[i].date <<" " <<spis[i].salary <<endl;
            found= 1;
                }
    }
    if ( !found ) {
        cout <<"Not found !" <<endl;
    }
    break;
 
case '2':
    cout <<"Vvedite vozrost'" <<endl;
    cin >>f;
    int found= 0;
    for ( int i=0; i<o; i++ ) {
        if ( f == spis[i].date ) {
            cout <<spis[i].fio <<" " <<spis[i].dolg <<" " <<spis[i].salary <<endl;
                        found= 1;
        }
    }
    if ( !found ) {
        cout <<"Not found !" <<endl;
    }
    break;
 
default:
    cout <<"Ne verni znak";
    break;
}
0
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
28.07.2009, 15:45  [ТС] 5
Извениodip, я еще только начинаю писать под С++ и не знаю где и когда надо ставить скобки
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
28.07.2009, 15:46 6
Лучше пиши везде скобки, даже если не обязательны. И располагай код лесенкой - друг под другом, тогда код будет читабельнее и сразу видно если где-то нет парности скобок.
0
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
28.07.2009, 16:08  [ТС] 7
а куда ты его написал???

Добавлено через 36 секунд
опс всё нашел


Вообщем ерунда какая-то вот этот текст не ищет дважды
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
switch(u){
 case'1':{cout<<"Vvedite dolgnost'"<<endl;
           cin>>z;{
           for(unsigned int i=0;i<o;i++){
           if(strcmp(spis[i].dolg, (char *) z) == 0)
           cout<<spis[i].fio<<" "<<spis[i].date<<" "<<spis[i].salary<<endl;
            k+=1;break;
           
           }
           if(!k)
           {
           cout<<"Ne naideno"<<endl;
           }
           }
           }
           break;
 
  case'2':{cout<<"Vvedite vozrost'"<<endl;
           cin>>f;
           for(unsigned int i=0;i<o;i++){
           if(f==spis[i].date){
           cout<<spis[i].fio<<" "<<spis[i].dolg<<" "<<spis[i].salary<<endl;
           k=k+1;break;
           }
           }
           if(!k)
           {
           cout<<"Ne naideno"<<endl;
           }
           break;
 
          default:cout<<"Ne verni znak"<<endl;break;
            }
         }
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
28.07.2009, 16:11 8
Скобки расставь !!!
А лишние убери - зачем после case '1': еще скобку делать.
Хотя можно и сделать
0
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
28.07.2009, 17:03 9
Помоему,автор имел ввиду начало всего процесса заново,для этого нужно сделать инструкцию switch в цикле.
0
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
28.07.2009, 19:05  [ТС] 10
нет смотрите че я хочу сделать. Так то программа написана уже но если в списке при поиске получается два одинаковых значения то он выводит только одно, а мне надо чтобы он выводил все

Добавлено через 4 минуты 14 секунд
в цикл ввести это не так трудно как заставить писать все его значения при поиске кстати odip, всё расставил, но не работает. А case'1' перестает работать без скобок!!!
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
28.07.2009, 20:06 11
2crashc: строки с 6 по 8 - нужно добавить { }

Добавлено через 1 минуту 22 секунды
И вместо k=k+1 или k+=1 проще сделать k++
0
24 / 24 / 2
Регистрация: 26.07.2009
Сообщений: 414
28.07.2009, 21:10  [ТС] 12
Всё программу написал код программы вот
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
#pragma argsused
int main(int argc, char* argv[])
{ struct Worker{
 char fio[30],dolg[15];
 int date;
 double salary;
 };
 unsigned int o,k=0;
  int f;
  char u;
 unsigned char z[15];
 cout<<"Ob'em spravki"<<endl;
 cin>>o;
 Worker *spis=new Worker[o],worker;
 cout<<"Vvedite Familiy,vozrost,dolgnost',salary"<<endl;
 for(unsigned int i=0;i<o;i++)
 cin>>spis[i].fio>>spis[i].date>>spis[i].dolg>>spis[i].salary;
 cout<<"--------------------------------"<<endl;
 cout<<"Spravka"<<endl;
 for(unsigned int i=0;i<o;i++){
 cout<<spis[i].fio<<" "<<spis[i].date<<" "<<spis[i].dolg<<" "<<spis[i].salary<<endl<<endl;
 }
 cout<<" "<<endl;
 cout<<"Vvedite sposob poiska"<<endl;
 cout<<"1. Po dolgnosti"<<endl;
 cout<<"2. Po vozrostu"<<endl;
 cin>>u;
 switch(u){
 case'1':{cout<<"Vvedite dolgnost'"<<endl;
           cin>>z;
           for(unsigned int i=0;i<o;i++)
           {if(strcmp(spis[i].dolg, (char *) z) == 0)
           {cout<<spis[i].fio<<" "<<spis[i].date<<" "<<spis[i].salary<<endl;
           k+=1;
           }
           }
           if(!k)
           {
           cout<<"Ne naideno"<<endl;
           }
           }
           break;
            
  case'2':{cout<<"Vvedite vozrost'"<<endl;
           cin>>f;
           for(unsigned int i=0;i<o;i++){
           if(f==spis[i].date){
           cout<<spis[i].fio<<" "<<spis[i].dolg<<" "<<spis[i].salary<<endl;
           k=k+1;
           }
           }
           if(!k)
           {
           cout<<"Ne naideno"<<endl;
           }
           break;
 
          default:cout<<"Ne verni znak"<<endl;break;
          }
         }
 
        cin.get();
        cin.get();
        return 0;
}
Всем большое спасибо за помощь.
Привычка с Delphi осталось!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2009, 21:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Можно ли присвоить объекту основного типа значение объекта пользовательского типа?
Правильно ли я понимаю, что SomeClass obj; int x = obj; или SomeClass obj; int x = 5 +...

В переменную какого типа можно запихнуть двумерный массив типа String
тип Variant это правильно или можно урезать? Waches показывает тип массива String а тип переменной...

Вызов переменной типа int и типа double из нескольких форм
У меня такой случай: мне нужно из вызвать переменные типа double (double RDW = 0.0; RDW =...

Аргумент типа const char* не совместим с параметром типа LPCWSTR
Начал учить win32 по книге Финогенова, вставил код первой проги в VS10, пишет мне ошибку &quot;аргумент...


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

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

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