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

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

Войти
Регистрация
Восстановить пароль
 
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
#1

Не совместимость типа - C++

27.07.2009, 19:03. Просмотров 685. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2009, 19:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не совместимость типа (C++):

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

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

Аргумент типа WCHAR* не совместим с параметром типа const char* - C++
Как исправить косяк? VS12 ругаетсЯ #include &lt;windows.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include...

Не удаётся создать безымянный объект типа vector моего типа - C++
Собсно #include &lt;vector&gt; using namespace std; //Вот мой австорский тип struct kletka { int i, j; kletka(int x, int...

Записать адрес переменной произвольного типа в переменную типа int - C++
Здравствуйте, есть структура __packed struct myStruct{ uint32 HisCh; uint32 sNo; uint16 tNo; uint32 reserv; };

Запись информации из вектора типа string в вектор типа double - C++
Как записать только числа , которые хранятся в векторе типа стринг, в вектор типа дабл, в векторе типа стринг есть как буквы так и числа ,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gravity
562 / 556 / 39
Регистрация: 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)
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
28.07.2009, 14:52  [ТС] #3
Скажите пожалуйста а как вставить в конструкцию If в 37, 43 строках чтобы если в результате того что он ничего не нашел выводил сообщение"НЕ найдено"
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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;
}
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
28.07.2009, 15:45  [ТС] #5
Извениodip, я еще только начинаю писать под С++ и не знаю где и когда надо ставить скобки
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.07.2009, 15:46 #6
Лучше пиши везде скобки, даже если не обязательны. И располагай код лесенкой - друг под другом, тогда код будет читабельнее и сразу видно если где-то нет парности скобок.
crashc
23 / 23 / 4
Регистрация: 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;
            }
         }
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.07.2009, 16:11 #8
Скобки расставь !!!
А лишние убери - зачем после case '1': еще скобку делать.
Хотя можно и сделать
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
28.07.2009, 17:03 #9
Помоему,автор имел ввиду начало всего процесса заново,для этого нужно сделать инструкцию switch в цикле.
crashc
23 / 23 / 4
Регистрация: 26.07.2009
Сообщений: 414
28.07.2009, 19:05  [ТС] #10
нет смотрите че я хочу сделать. Так то программа написана уже но если в списке при поиске получается два одинаковых значения то он выводит только одно, а мне надо чтобы он выводил все

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

Добавлено через 1 минуту 22 секунды
И вместо k=k+1 или k+=1 проще сделать k++
crashc
23 / 23 / 4
Регистрация: 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 осталось!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2009, 21:10
Привет! Вот еще темы с ответами:

Читать строку типа string из файла, разбить ее на массив слов типа char - C++
Нужно сделать так что бы строчка вида &quot;&lt;слово1&gt;:&lt;слово2&gt;:&lt;слово3&gt;:&lt;слово4&gt;&quot; , считывалась и каждое слово заносилось в свою переменную....

В массив типа double записываю целые числа (типа int), но ошибка не вылазиет! - C++
Вот программулька: #include &lt;iostream&gt; using namespace std; #include &lt;conio.h&gt; int main() { double arr={1,2,3,4,5}; ...

Перевести строку типа char в массив типа int - C++
Задание : В текстовом файле INPUT.TXT записаны целые числа через пробел, возможно, в несколько строк. За один просмотр файла сформировать...

Сформировать массив типа bool из массива типа char - C++
Доброго времени суток! После ввода элементов массива вылазит ошибка &quot;Необработанное исключение: System.NullReferenceException ... &quot;...


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

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

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