#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», если не передано никаких аргументов? как это проверить?
также, как я могу проверить, является ли первый аргумент целым числом ?, так что, если это не целое число и отрицательное число, выведите «Недопустимая длина фразы»
Ваше выражение argv[2] != s || t
является группироваться как (argv[2] != s) || t
левый аргумент ||
тогда bool
типа, и это проблема, так как нет перегруженного ||
оператор для std::string
это занимает bool
, Это объясняет загадочное сообщение компилятора.
Решение здесь состоит в том, чтобы написать
argv[2] != s && argv[2] != t
вместо. Обратите внимание, что я перешел ||
за &&
иначе условная проверка всегда true
и ваша программа будет всегда выход "INVALID MODE"
! Некоторые языки работают так, как у вас; C ++ нет.
Вы должны проверить, как это
if( (argv[2] != s) && (argv[2] != t))
Некоторые языки сценариев позволяют сравнивать, как в вопросе. PERL — один из таких языков.