[C++] ISO C++ forbids comparison between pointer and integer [-fpermissive]

1

Witam, mam do napisania taki program:

Uruchamiam program z parametrami startowymi, np. 2 3 +.
Program ma podawać wynik działania 2+3, jeżeli zamiast + będzie stało * to ma pomnożyć itd.
Napisałem coś takiego:

 
#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
    
    if(argv[3]=='+'||argv[3]=='-'||argv[3]=='/'||argv[3]=='*')
    {
	    if(argv[3]=='+')
	    {
	    	cout<<argv[1]<<"+"<<argv[2]<<"="<<atoi(argv[1])+atoi(argv[2])<<endl;
	    }
	    
	    if(argv[3]=='-')
	    {
	    	cout<<argv[1]<<"-"<<argv[2]<<"="<<atoi(argv[1])-atoi(argv[2])<<endl;
	    }
	    
	    if(argv[3]=='/')
	    {
	    	cout<<argv[1]<<"/"<<argv[2]<<"="<<atoi(argv[1])/atoi(argv[2])<<endl;
	    }
	    
	    if(argv[3]=='*')
	    {
	    	cout<<argv[1]<<"*"<<argv[2]<<"="<<atoi(argv[1])*atoi(argv[2])<<endl;
	    }
	}
	else
	{
		cout<<"Niepoprawe dane"<<endl;
	}
  
    
system ("pause");
return 0;
}

Wywala mi błąd kompilacji taki jak w temacie.
Jak można porównać element tablicy ze znakiem '+'?

2

strcmp() bo porównujesz nie ZNAK tylko STRINGA który akurat przypadkiem ma 1 znak...

1

argv[3] zawraca ci wskaźnik na char a nie znak!
Albo robisz porównanie stringów: strcmp(argv[3], "*")==0 albo porównujesz pierwszy znak: argv[3][0]=='*'.

Jako, że używasz C++, to lepiej jakbyś to zrobił tak:

#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    if (argc>=4) 
    {
        string oper(argv[3]);
        int a = atoi(argv[1]);
        int b = atoi(argv[2]);

        if(oper=="+")
        {
… … …
return 0;
}
0

Działa, działa.
A jeżeli chciałbym operować ne tylko na liczbach całkowitych?
Funkcja atoi() już sie nie nada?

0

atoi znaczy ascii to integer - wnioski możesz sam wyciągać

istringstream input("4.5656");
double d;
input >> d;

1 użytkowników online, w tym zalogowanych: 0, gości: 1