Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы со сравнением строк  (Прочитано 15999 раз)
0 Пользователей и 6 Гостей смотрят эту тему.
Kuzya
Гость
« : 11-09-2008 13:23 » 

Здравствуйте. Вопрос который я хочу задать возможно самый тупой на этом форуме, но видимо в силу своей небольшой просвещённости в С++ я не могу сам разобраться с проблемой.
Решил написать обычное маленькое консольное приложение которое просит ввести слово, а затем, исходя из введённой информации, производит какое-либо действие. Вот её код(полностью вырезан из VS):
Код:
// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>

using namespace std;

void main()
{
char cmd;

cout << "Enter command:";

cin >> cmd;
if(cmd == 'exit')
cout << "exiting";
else
cout << "not exiting";
}
Код нормально собирается, но при запуске если ввести "exit" пишется "not exiting", хотя должно писаться "exiting".
Объясните пожалуйста в чём проблема.
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 11-09-2008 13:30 » 

комменты по коду
Код:
void main()
{
char cmd; // здесь ты объявил тип "символ".

cout << "Enter command:";

cin >> cmd;        // здесь будет считан 1 символ - 'e'
if(cmd == 'exit')  // здесь ты сравниваешь символ с 'exit' - навскидку не скажу, но имхо это некорректно в обеих частях :)
cout << "exiting";
else
cout << "not exiting";
}

я бы сделал примерно так:

Код:
#include "stdafx.h"
#include <iostream>
#include <string> // используем строковый тип
using namespace std;

void main()
{
string cmd; // строковый тип

cout << "Enter command:";

cin >> cmd;
if(cmd == "exit")
cout << "exiting";
else
cout << "not exiting";
}
как-то так Улыбаюсь
Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #2 : 11-09-2008 13:37 » 

Вад, cin >> cmd;        // здесь будет считан 1 символ - 'e'

не согласен. cin работает поточно а не символьно.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 11-09-2008 14:37 » 

Макс, дело не в поточности, а в типе. ДАже если cin и считает всю строку, в переменной cmd будет только е.

Меня вот это больше всего прикололо 'exit', а не "exit". Как это в данном случае понимается?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #4 : 11-09-2008 15:13 » 

Джон, вот именно проблема в 'exit' ну собственно уже все сказали.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 11-09-2008 15:57 » 

Дык, я про то, что компилятор это дела хавает за милую душу.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 11-09-2008 16:29 » 

Джон, а интересно как именно он это схавает? в DWORD побайтно?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 11-09-2008 16:38 » 

Ochkarik, судя по тому, что выдаёт watch - похоже на то.
Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #8 : 11-09-2008 16:54 » 

вот что на компиляцию говорит моя среда:

Код:
||=== 123, Debug ===|
/home/mczim/programming/trash/123/main.cpp|12|предупреждение: multi-character character constant|
/home/mczim/programming/trash/123/main.cpp||In function ‘int main()’:|
/home/mczim/programming/trash/123/main.cpp|12|предупреждение: из-за ограниченности диапазона типа данных, результат сравнения всегда ложь|
||=== Build finished: 2 errors, 0 warnings ===|

Kuzya, использую стринг, раз уже уже начал пользовать stl.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 11-09-2008 17:00 » 

Дык вот и мне интересно. А как это можно посмотреть? Кастинг сделать? Ща попробую
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 11-09-2008 17:05 » 

вот что он мне выдал для

unsigned long dw = 'exit';

dw: 0x65786974

e 65
x 78
i 69
t 74

Всё точно. Афигеть! Дайте две. Улыбаюсь)

Макс, это VS
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Kuzya
Гость
« Ответ #11 : 11-09-2008 17:10 » new

Спасибо, со string всё прокатило и работает.
P.S. ещё кавычки заменил на двойные =)
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 11-09-2008 19:39 » 

Джон, Вад,
а с другой стороны... а как определено в стандарте?)
а если строка и символ юникодовский?)

PS
судя по интернету для юникода и т.д. используется обозначение типа L'a'
PPS а по страуструпу старому
"  Символьная константа состоит из символа, заключенного в одиночные
кавычки  (апострофы),  как,  например,  'х'.  Значением  символьной
константы является  численное значение  символа в  машинном  наборе
символов (алфавите).  Символьные константы  считаются данными  типа
int."
« Последнее редактирование: 11-09-2008 19:52 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 12-09-2008 03:24 » 

так вроде тут всё понятно -в апострофах - будет число, в кавычках - будет указатель на const char , на строку с нулём на концу )
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 12-09-2008 05:47 » 

а если строка и символ юникодовский?

Обычно компилятся ANSI тексты и юникод не разрешён в коде. Те у меня например ругается на вот такое

'szфыж'
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 12-09-2008 13:13 » 

Джон,
ну это понятно... оно в int точно не влезет.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines