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

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

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

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

27.07.2009, 19:03. Просмотров 678. Ответов 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     Не совместимость типа
Посмотрите здесь:

Определите объединения, элементами которого являются массивы из трех чисел типа long и с шести чисел типа int - C++
Определите объединения, элементами которого являются массивы из трех чисел типа long и с шести чисел типа int. Значение элементов...

Аргумент типа "HDC" несовместим с параметром типа const PAINTSTRUCT - C++
#include &lt;Windows.h&gt; int main(void) { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &amp;ps); HPEN p1, p2, p3, p4, p0; p1 =...

Совместимость программы - C++
Создал маленькую программу и передал ее другу. (У друга windows xp) Когда он ее запустил у него вышла ошибка &quot;путь к...

Совместимость типов - C++
Если я использую две разных библиотеки, в каждой из которых определен свой класс Vector3d(трехмерный вектор), то как мне организовать общий...

C++, UTF-8 и совместимость - C++
Имеется некоторая программа (шутка, прога ещё в проекте). Она по сути является одним из кусков системы общения (пишу себе псевдоИИ, но не...

Аргумент типа char** не совместим с параметром типа const char* - C++
Программа должна позволять заносить в структуру данные и выводить на экран информацию о поездах, следующих до определенной станции: ...

Как проверить совместимость типов в VC++ ? - C++
Как проверить совместимость типов в VC++?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++
7155 / 3295 / 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
Эксперт С++
7155 / 3295 / 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
Эксперт С++
7155 / 3295 / 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
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
28.07.2009, 20:06     Не совместимость типа #11
2crashc: строки с 6 по 8 - нужно добавить { }

Добавлено через 1 минуту 22 секунды
И вместо k=k+1 или k+=1 проще сделать k++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2009, 21:10     Не совместимость типа
Еще ссылки по теме:

Аргумент типа "LPCWSTR" несовместим с параметром типа "LPCSTR" - C++
Выводит ошибку в условии. Если включать мультикодировку, то выводится одна ошибка, если Юникод, то другая. Как исправить? BOOL...

Аргумент типа "int **" несовместим с параметром типа "int (*)[26]" - C++
Здравствуйте. Я не могу передать динамический двумерный массив в функцию. Как это можно сделать? И как можно нормально объявить массив ?...

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

Исходя из условия задачи, определить структуру комбинированного типа данных и типа полей - Pascal ABC
P.S-заголовок: Исходные данные разместить в текстовом файле. В программе не использовать массивов записей. Результаты выводить на экран и в...

SQL-запрос к этому полю типа 'SELECT * FROM [файл] WHERE [поле типа дата] > [ - Visual Basic
Суть проблемы: Есть база, созданная средствами VB (Visual Data Manager) в Access формате. В ней есть поле типа Data/Time. Так вот,...


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

Или воспользуйтесь поиском по форуму:
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 осталось!!!
Yandex
Объявления
28.07.2009, 21:10     Не совместимость типа
Закрытая тема Создать тему
Опции темы

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