• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kalkulator c++

Mały hosting, OGROMNE możliwości
0 głosów
372 wizyt
pytanie zadane 7 sierpnia 2022 w C i C++ przez KrzysiekM996 Nowicjusz (170 p.)

Cześć, postanowiłem napisać trochę ciekawszy kalkulator w konsoli tak by działał jak prawdziwy kalkulator, bez wciskania enter po podaniu liczb i znaków. natrafiłem jednak na problem, kod się kompiluje ale nie działa zgodnie z założeniem, wygląda na to że wpisane znaki nie zapisują się w programie, i nie wiem co robię źle.
Byłbym wdzięczny za jakąś wskazówkę.
 

#include <iostream>
#include <conio.h>

using namespace std;

int num1,num2;
char znak;

void wynik (int num1,char znak,int num2);
void numery (int a[], int b[]);
int i=0,j=0;
int n1[99], n2[99];


int main()
{
    int a=0;
    char x;

    while (true)
    {
            x = getche();

        if (x=='0'|| x=='1'||x=='2'||x=='3'||x=='4'||x=='5'||x=='6'||x=='7'||x=='8'||x=='9')
        {

            if (a==0)
            {
                   x=n1[i];
                   i++;
            }
            else if (a==1)
            {
                   x=n2[j];
                   j++;
            }
        }
        else if (x=='+'||x=='-'||x=='*'||x=='/')
        {
            x=znak;
            a=1;
        }
        else if (x=='=')
        {
            numery(n1,n2);
            wynik(num1,znak,num2);
            return 0;
        }
    }
    return 0;
}

void wynik(int num1,char znak,int num2)
{
    if (znak=='+')
    {
        cout<<"="<<(num1+num2)<<endl;
    }
    else if (znak=='-')
    {
        cout<<"="<<num1-num2<<endl;
    }
    else if (znak=='*')
    {
        cout<<"="<<num1*num2<<endl;
    }
    else if (znak=='/')
    {
        cout<<"="<<num1/num2<<endl;
    }
    else
    {
        cout<<endl<<"error";
    }
}

void numery(int a[],int b[])
{
    if (i==3)
    {
        int num1= (n1[0]*1000)+(n1[1]*100)+(n1[2]*10)+(n1[3]);
    }
    else if (i==2)
    {
        int num1= (n1[0]*100)+(n1[1]*10)+(n1[2]);
    }
    else if (i==1)
    {
        int num1= (n1[0]*10)+(n1[1]);
    }
    else if (i==0)
    {
        int num1= (n1[0]);
    }

    if (j==3)
    {
        int num2= (n2[0]*1000)+(n2[1]*100)+(n2[2]*10)+(n2[3]);
    }
    else if (j==2)
    {
        int num2= (n2[0]*100)+(n2[1]*10)+(n2[2]);
    }
    else if (j==1)
    {
        int num2= (n2[0]*10)+(n2[1]);
    }
    else if (j==0)
    {
        int num2= (n2[0]);
    }
}

 

1
komentarz 8 sierpnia 2022 przez VBService Ekspert (256,580 p.)
edycja 8 sierpnia 2022 przez VBService

BTW, jeżeli kalkulator dotyczy liczb typu integer

int num1,num2;

to czy jesteś pewien, że potrzebujesz rezerwować wielkość tablic na 99?

int n1[99], n2[99];

Maximum value of int in C++

 

Spróbuj ten kod

void numery(int a[],int b[])
{
    if (i==3)
    {
        int num1= (n1[0]*1000)+(n1[1]*100)+(n1[2]*10)+(n1[3]);
    }
    else if (i==2)
    {
        int num1= (n1[0]*100)+(n1[1]*10)+(n1[2]);
    }
    else if (i==1)
    {
        int num1= (n1[0]*10)+(n1[1]);
    }
    else if (i==0)
    {
        int num1= (n1[0]);
    }
 
    if (j==3)
    {
        int num2= (n2[0]*1000)+(n2[1]*100)+(n2[2]*10)+(n2[3]);
    }
    else if (j==2)
    {
        int num2= (n2[0]*100)+(n2[1]*10)+(n2[2]);
    }
    else if (j==1)
    {
        int num2= (n2[0]*10)+(n2[1]);
    }
    else if (j==0)
    {
        int num2= (n2[0]);
    }
}

 

skrócić zapis i uczynić funkcję numery bardziej "uniwersalną"

Convert an int array to a single int

1 odpowiedź

+1 głos
odpowiedź 7 sierpnia 2022 przez jankustosz1 Nałogowiec (37,030 p.)

Pomijając to, że niepotrzebnie robisz ify przez co kod jest 3 razy dłuższy to na oko problem jest tutaj:

x=n1[i];
...
x=n2[j];

zgaduje się chciałeś do tablicy przypisać wczytany znak, nie na odwrót

Podobne pytania

0 głosów
1 odpowiedź 1,140 wizyt
pytanie zadane 15 marca 2021 w C i C++ przez Kogut16 Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 546 wizyt
pytanie zadane 8 marca 2021 w C i C++ przez geniuszenk123 Nowicjusz (120 p.)
–1 głos
1 odpowiedź 1,448 wizyt

93,715 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,258 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...