C++ Academy · Oppitunti

Yksinkertaisen laskinkomentorivin rakentaminen

Rakenna komentorivilaskin, joka jäsentää operaattoreita ja laskee lausekkeiden arvot.

Oppitunti 1/414 vaihetta

Yksinkertaisen laskinkomentorivin rakentaminen on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.

Projektin tavoite

Rakentakaa komentorivilaskin, joka lukee lausekkeen, kuten 3 + 4, ja tulostaa tuloksen. Pidämme sen suppeana mutta hyvin jäsenneltynä.

Tarvittavat otsaketiedostot

Tarvitsemme iostream-otsaketiedoston syötettä ja tulostusta varten sekä string-otsaketiedoston syötettä varten.

#include <iostream>
#include <string>
#include <sstream>

Pääsilmukan runko

Lukekaa rivi, jäsentäkää se, laskekaa tulos ja tulostakaa se. Lopettakaa tiedoston lopussa.

int main() {
    std::string line;
    while (std::getline(std::cin, line)) {
        if (line == "quit") break;
        double result = evaluate(line);
        std::cout << "= " << result << "\n";
    }
}

Jäsentäminen stringstreamillä

Kahdelle operandille ja yhdelle operaattorille stringstream-pohjainen merkkijonon jakaminen osiin on yksinkertainen ja luotettava ratkaisu.

double evaluate(const std::string& line) {
    std::stringstream ss(line);
    double a, b;
    char op;
    ss >> a >> op >> b;
    return apply(op, a, b);
}

Operaattorin käsittely

Käyttäkää operaattorimerkin perusteella tehtävää switch-rakennetta.

double apply(char op, double a, double b) {
    switch (op) {
        case '+': return a + b;
        case '-': return a - b;
        case '*': return a * b;
        case '/': return b != 0 ? a / b : 0;
        default:  return 0;
    }
}

Virheenkäsittely

Mitä tapahtuu, jos käyttäjä kirjoittaa jotakin virheellistä? Tarkistakaa streamin tila ja ilmoittakaa asiasta selkeästi.

if (!(ss >> a >> op >> b)) {
    std::cout << "Invalid input\n";
    return 0;
}

Nollalla jakaminen

Käsitelkää nollalla jakaminen erikseen. Tulostakaa virheilmoitus tai heittäkää poikkeus — valitkaa suunnitteluunne sopiva tapa.

if (op == '/' && b == 0) {
    throw std::runtime_error("division by zero");
}

Lisää operaattoreita

Laajentakaa switch-rakennetta tukemaan uusia operaatioita: %, potenssiin korotukseen käytettävä ^ tai nimettyjä funktioita, kuten sqrt.

Tilan ylläpitäminen

Haluatteko juoksevan summan? Tallentakaa viimeisin tulos ja antakaa käyttäjän aloittaa lauseke merkillä +.

double last = 0;
// if first token is an operator, use `last` as the first operand

Käyttökokemuksen viimeistely

Tulostakaa kehote ennen jokaista syötettä, hyväksykää lopetuskomennoksi quit tai tiedoston loppu ja ohittakaa tyhjät rivit.

Useampi kuin kaksi operandia

Usean operandin lausekkeita, kuten 3 + 4 * 2, varten tarvitsette lausekejäsentimen. Shunting-yard-algoritmi on vakiintunut lähestymistapa.

Laskimen testaaminen

Ohjatkaa syöte tiedostosta, jotta voitte testata ohjelmaa nopeasti.

echo "3 + 4\n10 / 2" | ./calc

Pikakertaus

Mikä standardikirjaston ominaisuus sopii välilyönneillä eroteltujen osien, kuten 3 + 4, jäsentämiseen?

Kertaus

Pieni komentorivilaskin havainnollistaa syötettä ja tulostusta, stringstreamillä jäsentämistä sekä switch-rakenteeseen perustuvaa käsittelyä. Laajentakaa sitä virheenkäsittelyllä, uusilla operaattoreilla, tilalla ja lopulta lausekejäsentimellä.

Aloita maksutta

Opi C++ tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”Yksinkertaisen laskinkomentorivin rakentaminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Yksinkertaisen laskinkomentorivin rakentaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Yksinkertaisen laskinkomentorivin rakentaminen”?

Rakenna komentorivilaskin, joka jäsentää operaattoreita ja laskee lausekkeiden arvot. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Yksinkertaisen laskinkomentorivin rakentaminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?

Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Yksinkertaisen laskinkomentorivin rakentaminen
  2. CSV-tiedostojen lukeminen ja kirjoittaminen
  3. Lukujen arvauspeli
  4. Sanojen esiintymislaskuri
← Takaisin: C++ Academy