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

Массив строк, не правильный поиск - C++

Восстановить пароль Регистрация
 
K2rusH
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 7
10.05.2009, 19:31     Массив строк, не правильный поиск #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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define N 2
 
 char name[N][10];
 char instrument[N];
 int year[N];
 int time[N];
 
   int menu();
   void enter();
   void search();
   int main()
   {
       enter();
       search();
       getch();
           return 0;
 
   }
   int menu()
   {
       int choice;
       cout <<"1.Ckpunka \n";
       cout <<"2.Gitara \n";
       cout <<"3.BA9H \n";
       cout <<"4.bapabaH \n";
       cout <<"Instrument? ";
       cin >> choice;
       return choice;
   }
   void enter()
   {
       int i,choice;
       for(i=0;i<N;i++)
       {
           cout << "name";
           cin >> name[i];
       choice = menu();
       switch(choice)
       {
       case 1: strcpy(instrument, "Ckpunka");
           break;
       case 2: strcpy(instrument, "Gitara");
           break;
       case 3: strcpy(instrument, "BA9H");
           break;
       case 4: strcpy(instrument, "bapabaH");
           cout << instrument;
           break;
       default: cout << "eIIIe \n \n";
 
       }
           cout << "year";
           cin >> year[i];
           cout << "time";
           cin >> time[i];
       }
   }
 
   void search()
   {
       int i;
       for(i=0;i<N;i++)
       {
           if (!strcmp(instrument, "Ckpunka"))
               cout << name[i];
               cout <<endl;
               getch();
       }
   }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2009, 19:31     Массив строк, не правильный поиск
Посмотрите здесь:

C++ Ввод нескольких строк или массив строк
Массив строк как массив указателей на массивы чаров C++
Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из него К последних строк C++
Используя функцию копирования строк, организуйте конкатенацію и копирование строк в четвертый массив, содержащий полные имена C++
Запросить название учебного заведения, специальность и номер группы. записав их в массив из 3 строк. Подсчитать длины каждой строк C++
C++ Задано массив строк произвольной длины. Отформатировать данный массив по ширине поля.
Заполнить массив строк из файла. Массив заполняется, но выводится не корректно C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
D1m0n
3 / 3 / 1
Регистрация: 10.05.2009
Сообщений: 9
10.05.2009, 19:55     Массив строк, не правильный поиск #2
Хочу вывести имя ученика играюшего на скрипке, но он упорно выводит имена всех.
Так и должно быть, нет ?
C
1
2
if (!strcmp(instrument, "Ckpunka"))
                           cout << name[i];
Если инструмент не скрипка, вывести имя, так ?
Убрать восклицательный знак наверно нужно перед сравнением строк.

Массив instrument может расширить, два символа маловато, чтобы записать в него слово "Ckpunka".
K2rusH
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 7
10.05.2009, 20:32  [ТС]     Массив строк, не правильный поиск #3
По-моиму так быть не должно, ибо вывод определяется условием.
"При использовании функции strcmp() важно помнить, что она возврашается число 0, если сравнивыемые строки равны. Следовательно, если вым необходимо выполнить определённые действия при условии совпадения строк, вы должны использовать оператор НЕ (!).
Массив расширил.
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
10.05.2009, 20:36     Массив строк, не правильный поиск #4
Код
 char name[N][10];
 char instrument[N];
 int year[N];
 int time[N];
Эти данные надо оформлять структурой.
Цитата Сообщение от K2rusH Посмотреть сообщение
Хочу вывести имя ученика играюшего на скрипке, но он упорно выводит имена всех.
Ну дык, переменная instrument у тебя же одна на всех, если последний раз в нее записывалась скрипка, то все имена и выведутся.
K2rusH
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 7
10.05.2009, 20:45  [ТС]     Массив строк, не правильный поиск #5
Угу, я это немного осознал =) А как исправить не подскажете?
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
10.05.2009, 20:55     Массив строк, не правильный поиск #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
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define N 2
 
struct user {
    char name[80];
    char instrument[20];
    int year;
    int utime;
} usertab[N];
 
int menu();
void enter();
void search();
 
int main()
{
    enter();
    search();
    getch();
    return 0;
}
 
int menu()
{
    int choice;
    cout <<"1.Ckpunka \n";
    cout <<"2.Gitara \n";
    cout <<"3.BA9H \n";
    cout <<"4.bapabaH \n";
    cout <<"Instrument? ";
    cin >> choice;
    return choice;
}
 
void enter()
{
    int i,choice;
    for(i=0;i<N;i++) {
        cout << "name";
        cin >> usertab[i].name;
        choice = menu();
        switch(choice) {
            case 1: strcpy(usertab[i].instrument, "Ckpunka");
                    break;
            case 2: strcpy(usertab[i].instrument, "Gitara");
                    break;
            case 3: strcpy(usertab[i].instrument, "BA9H");
                    break;
            case 4: strcpy(usertab[i].instrument, "bapabaH");
                    break;
            default: cout << "eIIIe \n \n";
        }
        cout << "year";
        cin >> usertab[i].year;
        cout << "time";
        cin >> usertab[i].utime;
    }
}
 
void search()
{
    int i;
    for(i=0;i<N;i++)
        if (!strcmp(usertab[i].instrument, "Ckpunka"))
            cout << usertab[i].name << endl;
}
K2rusH
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 7
10.05.2009, 21:08  [ТС]     Массив строк, не правильный поиск #7
Ух. Это впечатляет. Спасибо.
А можно обьяснить или ссылочку, где будет описано что такое usertab?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2009, 21:22     Массив строк, не правильный поиск
Еще ссылки по теме:

C++ Добавление неодинаковых строк в массив строк
C++ Вводится массив строк текста с неизвестным заранее количеством строк
Переписать массив строк из файла в двумерный массив C++
C++ Динамический двумерный массив строк и операции со строками (поиск, обрезка, слияние)
Внесение строк в массив строк (не сложно) C++

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

Или воспользуйтесь поиском по форуму:
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
10.05.2009, 21:22     Массив строк, не правильный поиск #8
usertab - это массив структур типа user, учи лучше что такое структуры
http://www.cplusplus.com/doc/tutorial/structures/
http://masterpc.alfaspace.net/books/...programming/6/
Yandex
Объявления
10.05.2009, 21:22     Массив строк, не правильный поиск
Ответ Создать тему
Опции темы

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