[Решено]Сравнение argv[n] со строкой. (Требуется проверить вводимые параметры.)

Модератор: Модераторы разделов

Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

[Решено]Сравнение argv[n] со строкой.

Сообщение ffldove »

Есть участок кода:

Код: Выделить всё

if (argv[1]=="111") cout<<"==";

Почему при запуске:

Код: Выделить всё

prog 111

проверка if не проходит? какова типа массив argv?
I learned something today
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: [Решено]Сравнение argv[n] со строкой.

Сообщение eddy »

А как это вы строковую переменную при помощи == сравниваете? Честно говоря, плюсы я уже подзабыл, но в сях такое можно делать лишь при помощи strcmp или memcmp. А argv - обычный массив указателей.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [Решено]Сравнение argv[n] со строкой.

Сообщение NickLion »

Дополню, что strcmp (stricmp - для сравнения без учёта регистра) возвращает 0 в случае равенства строк. Значение меньшее 0, если первая строка меньше второй и больше, если первая больше. Т.е. Если по логике надо сравнить
a == (!= < > <= >=) b
то вместо этого пишут
strcmp(a,b) == (!= < > <= >=) 0

Либо использовать std::string:
if( std::string( argv[1] ) == std::string( "111" ) )
Но это лишнее, имхо.
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: [Решено]Сравнение argv[n] со строкой.

Сообщение agentprog »

ну вместо того, чтобы написать

Код: Выделить всё

if (strcmp(a, b) == 0)
  ...

можно писать и

Код: Выделить всё

if (!strcmp(a, b))
  ...

но это менее интуитивно понятно :)
No problems - just solutions!
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [Решено]Сравнение argv[n] со строкой.

Сообщение NickLion »

agentprog писал(а):
14.07.2010 10:42
ну вместо того, чтобы написать

Код: Выделить всё

if (strcmp(a, b) == 0)
  ...

можно писать и

Код: Выделить всё

if (!strcmp(a, b))
  ...

но это менее интуитивно понятно :)

Сам так обычно пишу :blush: Но для начинающего лучше форма записи с явным сравнением.
Спасибо сказали:
Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

Re: [Решено]Сравнение argv[n] со строкой.

Сообщение ffldove »

Спасибо. Использовал stricmp, так как именно без регистра будет в данном случае уместнее.
I learned something today
Спасибо сказали: