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

Не проверяется условие - C++

Восстановить пароль Регистрация
 
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
15.02.2014, 23:54     Не проверяется условие #1
Задание состоит в том, чтобы вывести на экран фамилии студентов, которые живут в Киеве и имеют оценку не нижу 4.5.
Вопрос: почему не проверятся условие, а просто игнорируется
C++
1
if(spisok[i].address="Kiev")
?
Программа компилируется, но на экран выводятся фамилии студентов, у которых балл не меньше 4.5, не проверяя первого условия.
заранее спасибо
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
#include <iostream> 
#include <conio.h>
 
using namespace std;
 
struct abit
{
    char* name;
    char* address;
    float point;
    
};
 
void vivod(abit*spisok,int n)
{
    int i;
    for(i=0;i<n;i++)
        if(spisok[i].address="Kiev")
            if(spisok[i].point>=4.5)
                
                cout<<spisok[i].name<<endl;
    getch();
}
int main()
{
    abit spisok[]={{"ivanov","Kiev",4.6},
                   {"petrov","Kiev",4.2},
                   {"sidorov","Krivoi Rog",4.7},
                   {"samohina","Dnepropetrovsk",4.5},
                   {"vasilev","Kiev",4.8}
                  };
    vivod(spisok,5);
    return 0;
}
Добавлено через 6 минут
Еще один вопрос: как мне вывести на экран эти фамилии по алфавиту?

СПАСИБО
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mishelle92
57 / 56 / 19
Регистрация: 09.10.2012
Сообщений: 179
Завершенные тесты: 1
15.02.2014, 23:58     Не проверяется условие #2
C++
1
if(spisok[i].address=="Kiev")
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
16.02.2014, 00:06  [ТС]     Не проверяется условие #3
Как вывести эти фамилии по алфавиту?
Spirit370
 Аватар для Spirit370
1 / 1 / 2
Регистрация: 08.08.2013
Сообщений: 86
16.02.2014, 02:10     Не проверяется условие #4
Цитата Сообщение от aimbat Посмотреть сообщение
Как вывести эти фамилии по алфавиту?
используй функцию сортировки вектора
sort(vector.begin(),vector.end())
Вектор сортируется по алфавиту от 1 элемента до последнего

в твоём случае
sort(spisok.begin(),spisok.end());
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,053
16.02.2014, 02:13     Не проверяется условие #5
Цитата Сообщение от mishelle92 Посмотреть сообщение
if(spisok[i].address=="Kiev")
серьезно?
для
Цитата Сообщение от aimbat Посмотреть сообщение
char* address;
strcmp
http://lord-n.narod.ru/download/book.../14/strcmp.htm
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
16.02.2014, 02:18     Не проверяется условие #6
Цитата Сообщение от ValeryS Посмотреть сообщение
if(spisok[i].address=="Kiev")
серьезно?
для
Сообщение от aimbat
char* address;
strcmp
http://lord-n.narod.ru/download/book.../14/strcmp.htm
Выдает варнинг но сравнивает =)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,053
16.02.2014, 02:20     Не проверяется условие #7
Цитата Сообщение от Alex566 Посмотреть сообщение
Выдает варнинг но сравнивает =)
не Visual Studio случайно?
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
16.02.2014, 02:20     Не проверяется условие #8
Цитата Сообщение от ValeryS Посмотреть сообщение
не Visual Studio случайно?
А визуал студио даже варнинг не выдает. Geany + MinGW
DrOffset
6458 / 3832 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
16.02.2014, 02:21     Не проверяется условие #9
Цитата Сообщение от Alex566 Посмотреть сообщение
Выдает варнинг но сравнивает =)
Он сравнивает, только не то. Сравнивает адреса, а не строки.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,053
16.02.2014, 02:23     Не проверяется условие #10
Цитата Сообщение от Alex566 Посмотреть сообщение
Выдает варнинг но сравнивает =)
так варнинг то на что?
на
if(spisok[i].address=="Kiev")?
или на strcmp?
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
16.02.2014, 02:26     Не проверяется условие #11
Цитата Сообщение от DrOffset Посмотреть сообщение
Он сравнивает, только не то. Сравнивает адреса, а не строки.
В смысле? Если бы он сравнивал адреса все время возвращало бы фолс. Не могут же они по одному адрессу находится. А так выдает правильны результат, но если изменить к примеру K на k результат меняется.

Добавлено через 36 секунд
ValeryS, на if(spisok[i].address=="Kiev")

И qt + MinGW 4.8 тоже =). Я тоже был убежден что строки char* нужно сравнивать strcmp. Видимо есть какие-то нюансы.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,053
16.02.2014, 02:33     Не проверяется условие #12
Цитата Сообщение от Alex566 Посмотреть сообщение
В смысле? Если бы он сравнивал адреса все время возвращало бы фолс. Не могут же они по одному адрессу находится.
кто строковые литералы? вполне могут, поскольку это один и тот же
а теперь введи строку с клавиатуры и проверь
приятно удивишся

не сравнивают так строки, поскольку по большому счету строка это массив символов
ты же массивы так не сравниваешь
arr1==arr2
или сравниваешь?
для сторк
strcmp
для массивов
memcmp
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
16.02.2014, 02:33  [ТС]     Не проверяется условие #13
Не подскажите тогда как мне лучше это реализовать в моем коде?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,053
16.02.2014, 02:36     Не проверяется условие #14
Цитата Сообщение от Alex566 Посмотреть сообщение
ValeryS, на if(spisok[i].address=="Kiev")
а теперь переведи этот варнинг
про что он говорит?

Добавлено через 2 минуты
Цитата Сообщение от aimbat Посмотреть сообщение
Не подскажите тогда как мне лучше это реализовать в моем коде?
я же тебе ссылку кинул на функцию
Цитата Сообщение от aimbat Посмотреть сообщение
if(spisok[i].address="Kiev")
C++
1
if(strcmp(spisok[i].address,"Kiev")==0)
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
16.02.2014, 02:38  [ТС]     Не проверяется условие #15
Теперь как вывести на экран эти фамилии в алфавитном порядке?
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
16.02.2014, 02:41     Не проверяется условие #16
Цитата Сообщение от ValeryS Посмотреть сообщение
а теперь переведи этот варнинг
Ладно убедил =)

Я просто считал что даже одинаковые строковые литералы попадают в разные адреса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2014, 02:43     Не проверяется условие
Еще ссылки по теме:

C++ Почему неправильно проверяется условие?
Условие C++
C++ Почему не проверяется условие else if

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

Или воспользуйтесь поиском по форуму:
DrOffset
6458 / 3832 / 885
Регистрация: 30.01.2014
Сообщений: 6,627
16.02.2014, 02:43     Не проверяется условие #17
Цитата Сообщение от Alex566 Посмотреть сообщение
В смысле? Если бы он сравнивал адреса все время возвращало бы фолс. Не могут же они по одному адрессу находится.
Могут. Компилятор имеет право в случае ТС не делать две разных строки, если содержимое одинаковое, в целях оптимизации. По факту это одна строка. Выведи адрес и убедишься.

Цитата Сообщение от Alex566 Посмотреть сообщение
А так выдает правильны результат, но если изменить к примеру K на k результат меняется.
Строки различаются и компилятор начинает их размещать в разных стораджах. Адреса меняются.

Цитата Сообщение от Alex566 Посмотреть сообщение
И qt + MinGW 4.8 тоже =). Я тоже был убежден что строки char* нужно сравнивать strcmp. Видимо есть какие-то нюансы.
Нюансы есть, но не в том смысле, в котором ты подумал.
Yandex
Объявления
16.02.2014, 02:43     Не проверяется условие
Ответ Создать тему
Опции темы

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