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

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

Войти
Регистрация
Восстановить пароль
 
K2rusH
0 / 0 / 0
Регистрация: 10.04.2009
Сообщений: 7
#1

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

10.05.2009, 19:31. Просмотров 464. Ответов 7
Метки нет (Все метки)

Вводим имя, инструмент, год рождения, время обучения.
Хочу вывести имя ученика играюшего на скрипке, но он упорно выводит имена всех. Пробывал в разных вариациях, не только так, но уже устал, по этому обрашаюсь за помощью к вам.
Знаю что реализация через свич не очень, но вот так получилось.

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++
Создать динамический двумерный массив на 10 ячеек (для десяти строк). Заполнить его строчками текста, принятыми с клавиатуры. ...

Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из него К последних строк - C++
Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из него К последних строк.

Вводится массив строк текста с неизвестным заранее количеством строк - C++
1)Вводится массив строк текста с неизвестным заранее количеством строк.Ввод текста заканчивается, если введенная строка текста будет равна...

Используя функцию копирования строк, организуйте конкатенацію и копирование строк в четвертый массив, содержащий полные имена - C++
Пожалуйста с этим заданием. Написать программу, которая описывает четыре массива. Три первых массива должны содержать имена, фамилии и...

Ввод нескольких строк или массив строк - C++
У меня есть массив строк. Нужно ввести несколько строк, но не получается. Вот код: int main() { const int n=4; const int...

Запросить название учебного заведения, специальность и номер группы. записав их в массив из 3 строк. Подсчитать длины каждой строк - C++
Запросить у пользователя название учебного заведения, специальность и номер группы. записав их в массив из 3 строк. Подсчитать длины каждой...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
562 / 556 / 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
562 / 556 / 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?
Gravity
562 / 556 / 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/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2009, 21:22
Привет! Вот еще темы с ответами:

Добавление неодинаковых строк в массив строк - C++
Здравствуйте! Возникла такая проблема, не могу понять как реализовать добавление в массив строк нодинаковых значений. Вот моя проба, знаю,...

Внесение строк в массив строк (не сложно) - C++
Всем привет. Есть одна проблемка в решении задачи. Задачу я решил, но необходимо немного доделать. Прошу помощи! Заранее благодарен) ...

Заполнить массив строк из файла. Массив заполняется, но выводится не корректно - C++
Здравствуйте! Такая проблема. В файле имена записаны в столбик и разделены точкой с запятой. Массив заполняется, но выводится не корректно....

Задано массив строк произвольной длины. Отформатировать данный массив по ширине поля. - C++
Задано массив строк произвольной длины. Отформатировать данный массив по ширине поля.


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

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

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