Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 09.07.2014
Сообщений: 59

Плохо сравниваются строки через strcmp

21.05.2015, 20:54. Показов 1524. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Пользователей вводит минимальное кол-во матчей, которое сравнивается с данными которые в файле и выводится информация о футболисте.
Вот такой код сравнения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (i = 0; i < n; i++){
        if (strcmp(game, a[i].game) <= 0) {
            k = 1;
            std::cout << std::setw(3) << i + 1;
            std::cout << std::setw(12) << a[i].fio;
            std::cout << std::setw(18) << a[i].team;
            std::cout << std::setw(12) << a[i].game;
            std::cout << std::setw(10) << a[i].goal;
            std::cout << std::setw(12) << a[i].pass;
            std::cout << std::setw(15) << atoi(a[i].goal) + atoi(a[i].pass);
            std::cout << std::endl;
        }
    }
game - введеное мин.кол-во
a[i].game - кол-во из файла

Если числа двухзначные, то поиск работает исправно, а вот если вводить однозначные или в файле однозначные цифры - то поиск ведёт себя неадекватно.
Как быть?
Заранее спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2015, 20:54
Ответы с готовыми решениями:

Не сравниваются строки
Сегодня мне понадобилось вызвать программу с аргументом команднйо строки я посмотрел пример на ...

Не сравниваются строки через Contains
Допустим, что у меня есть два строковых массива. В одном массиве целое предложение. (&quot;Василий Пупкин приехал в огород&quot;), в другом...

Не сравниваются строки
Подскажите, как ввод с клавиатуры сравнить с &quot;zzz&quot; и выйти из цикла не хочет сравнивать string name и a? import java.util.Scanner; ...

7
68 / 67 / 59
Регистрация: 14.07.2013
Сообщений: 251
22.05.2015, 10:29
game и a[].game как объявлены? string\char?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
22.05.2015, 10:44
Negative value if lhs appears before rhs in lexicographical order.
Zero if lhs and rhs compare equal.
Positive value if lhs appears after rhs in lexicographical order.
0
0 / 0 / 1
Регистрация: 09.07.2014
Сообщений: 59
27.05.2015, 12:42  [ТС]
Объявление раз:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct bil {
    char team[L];
    char fio[L];
    char game[L];
    char goal[L];
    char pass[L];
};
const int N = 100;
class football {
private:
    bil a[N];
    int n;
public:
    void openfile();
    void edit();
    void saving();
    void dop();
    void udalenie();
    void poiskgame();
    void sortfio();
};
Реализация поиска:
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
void football::poiskgame() //Поиск по количеству матчей
{
    int q, i, u;
    //int p=0;
    char game[L];
    openfile();
    cout << ("\nВведите минимальное количество проведенных матчей:");
    std::cout << str;
    do {
        k = 1;
        std::cin >> game;
        q = strlen(game);
        for (u = 0; u < q; u++) {
            Check(game[u]);
        }
        if (k == 0) {
            cout << ("Неверный ввод. Введите число");
            std::cout << str << std::endl;
        }
    } while (k == 0);
    system("CLS");
    cout << ("№");
    std::cout << std::setw(3) << str;
    std::cout << ("Фамилия");
    std::cout << std::setw(12) << str;
    std::cout << ("Команда");
    std::cout << std::setw(10) << str;
    std::cout << ("Матчи");
    std::cout << std::setw(8) << str;
    std::cout << ("Голы");
    std::cout << std::setw(8) << str;
    std::cout << ("Передачи");
    std::cout << std::setw(7) << str;
    std::cout << ("Г+П\n\n");
    std::cout << std::setw(7) << str;
    std::cout << std::endl;
    k = 0;
    for (i = 0; i < n; i++){
        if (strcmp(game, a[i].game) <= 0) {
            k = 1;
            std::cout << std::setw(3) << i + 1;
            std::cout << std::setw(12) << a[i].fio;
            std::cout << std::setw(18) << a[i].team;
            std::cout << std::setw(12) << a[i].game;
            std::cout << std::setw(10) << a[i].goal;
            std::cout << std::setw(12) << a[i].pass;
            std::cout << std::setw(15) << atoi(a[i].goal) + atoi(a[i].pass);
            std::cout << std::endl;
        }
    }
    if (!k) {
        cout << (" \n\n     Поиск не дал результатов.\n");
        std::cout << str;
    }
    system("PAUSE");
    system("CLS");
}
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
27.05.2015, 12:47
strcmp(game, a[i].game) <= 0 - тут у вас стравниваются строки символов, а не числа, так что сравнение некорректно.
0
0 / 0 / 1
Регистрация: 09.07.2014
Сообщений: 59
28.05.2015, 12:28  [ТС]
Становится немного понятным.
А как сравнить в таком случае как у меня?
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
28.05.2015, 12:31
Лучший ответ Сообщение было отмечено nik_neman как решение

Решение

Приводить их к одному числовому типу и сравнивать уже числа. Смотрите функции вроде atoi(), strto...().
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.05.2015, 14:02
Почему просто не сделать game числовым полем? Зачем там строка?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2015, 14:02
Помогаю со студенческими работами здесь

Не сравниваются строки
И снова здраствуйте форумчане, все считывается отлично, все заносится прекрасно, но в последнем ифе не сравниваются строки, цикл просто...

Не сравниваются строки массива
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; struct list { int regnumb; int visits; ...

Неправильно сравниваются строки
Собственно, есть две строки, полученные из инпутов. В инпутах содержатся условные пароли - символы, цифры, буквы. У обоих gettype...

Не сравниваются равные строки
char buf = new char; try { ...

Неправильно сравниваются строки
Есть две строки, 1 строка получена из инпута, вторая получена из файла test.php таким образом: file_get_contents('test.php'); Данные...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru