аргумент командной строки, наклон или две переменные

#include <fstream>
#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char* argv[])
{

string s = "all";
string t = "top";
for (int i=1; i<argc ; i++)
{
cout<< argv[i]<< endl;
if( argv[2] != s || t)
{
cout<<"INVALID MODE"<< endl;
return -1;
}
}
}

Нет жизнеспособного преобразования из ‘std :: __ 1 :: string’ (он же basic_string, allocator> ‘) в’ bool ‘. Неверные операнды в двоичный

выражение (‘bool’ и ‘std :: __ 1 :: string’ (он же ‘basic_string, allocator>’))

привет, я передаю аргументы командной строки, такие как «1 all emptyfile» и «1 top emptyfile», здесь я хочу проверить, не является ли второй аргумент not all или top, чтобы вывести «INVALID MODE». У меня проблемы с пониманием, почему я не могу использовать s || t. я получаю ошибки, которые я написал выше, есть ли в любом случае вокруг этого

Я получил помощь, благодаря этому сайту, но у меня есть еще один вопрос, если у меня есть top или all в качестве второго аргумента, я хочу, чтобы он НЕ печатал «INVALID MODE». но, кажется, все еще распечатывается «недопустимый режим», где в этом случае все является вторым аргументом, но, похоже, не печатается, когда top является вторым аргументом.

СНОВА большое спасибо, еще одна вещь, с которой у меня проблемы, это как распечатать «NO PHRASE LENGTH», если не передано никаких аргументов? как это проверить?

также, как я могу проверить, является ли первый аргумент целым числом ?, так что, если это не целое число и отрицательное число, выведите «Недопустимая длина фразы»

2

Решение

Ваше выражение argv[2] != s || t является группироваться как (argv[2] != s) || tлевый аргумент || тогда bool типа, и это проблема, так как нет перегруженного || оператор для std::string это занимает bool, Это объясняет загадочное сообщение компилятора.

Решение здесь состоит в том, чтобы написать

argv[2] != s && argv[2] != t

вместо. Обратите внимание, что я перешел || за && иначе условная проверка всегда true и ваша программа будет всегда выход "INVALID MODE"! Некоторые языки работают так, как у вас; C ++ нет.

4

Другие решения

Вы должны проверить, как это

if( (argv[2] != s) && (argv[2] != t))

Некоторые языки сценариев позволяют сравнивать, как в вопросе. PERL — один из таких языков.

1

Похожие вопросы
Добавить ответ
Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Нажимая кнопку «Отправить», я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности этого сайта.