Programim dhe zhvillim, javascript, python, php, html

Pse keep_window_open() nuk pret që të futet një karakter?

Unë jam i ri në programim, dhe po përpiqem të mësoj vetë C++ dhe po ndjek "Parimet e programimit dhe praktikën duke përdorur C++".

Po përpiqesha të bëja një ushtrim që, pas hapave të tjerë të ndryshëm, më kërkonte

" ...ndrysho trupin e lakut në mënyrë që të lexojë vetëm një dyfish çdo herë. Përcaktoni dy variabla për të mbajtur gjurmët se cila është vlera më e vogël dhe cila është vlera më e madhe që keni parë deri tani. Çdo herë përmes ciklit shkruani nga vlera e futur. Nëse është më e vogla deri tani, shkruani më të voglin deri më tani pas numrit. Nëse është më e madhja deri tani, shkruani më të madhin deri tani pas numrit".

Deri tani kam shkruar kodin e mëposhtëm:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open() { cout<<"\nType a character to exit: "; char ch; cin>>ch; }

int main()
{
double val1 = 0, smallest = 0, largest = 0;
int flag = 0;
while (cin >>val1) {
    if (val1=='|')
        break;
    else
        cout <<val1 <<'\n';
    if (flag==0) {
        smallest = val1;
        cout <<smallest <<" it's the smallest value so far.\n";
    }
    if (val1<smallest) {
        smallest = val1;
        cout <<smallest <<" it's the smallest value so far.\n"; }
    else if (val1>largest) {
             largest = val1;
             cout <<largest <<" it's the largest value so far.\n"; }
    ++flag;
}

keep_window_open();

return 0;
}

Problemi im është se kur fut një karakter, p.sh. 'c', programi përfundon, edhe pse programi duhet të përfundojë, hipotetikisht, vetëm kur fut '|', dhe marr:

c

Type a character to exit:
Process returned 0 (0x0)     execution time : ...
Press any key to continue.

dhe "keep_window_open()" nuk pret që të futet një karakter. Unë thjesht nuk mund ta kuptoj se çfarë ndodh dhe pse. A ka dikush një ide?

07.06.2016

Përgjigjet:


1

Epo, mendoj se problemi është në mënyrën se si e përkufizove shprehjen tënde të lakut. As cin dhe as operatori i tij ">>" nuk kthejnë një vlerë të vërtetë / false me të cilën mund të punoni. Ata kthejnë një objekt iStream i cili mund të jetë një përkthim i dyshimtë në i vërtetë ose i rremë nëpërmjet një transmetimi të automatizuar që ndodh pas perdeve. Sidoqoftë, ato do të kthehen null kur hyrja nuk mund të vendoset brenda ndryshores suaj, si në rastin e përpjekjes për të vendosur 'c' në një dyshe, dhe null përkthehet në false.

Ajo që unë sugjeroj për ju është të krijoni një lak të thjeshtë while(true) dhe kur të merrni "|" karakter nga përdoruesi (si varg) ju thyeni ciklin. deri atëherë cikli vazhdon. pastaj brenda ciklit analizoni vlerën tuaj dhe punoni në të sipas logjikës tuaj (minimumi / maksimumi)

07.06.2016

2

Problem

while (cin >>val1) lexon hyrjen në një dyshe. Nëse futni diçka që nuk mund të lexohet si dyshe si "|" atëherë kjo do të dështojë dhe do të bëjë që cikli juaj të dalë.

Më pas provoni të lexoni më shumë hyrje ndërsa cin është në gjendje gabimi.

Zgjidhje

Telefononi cin.clear() për të pastruar fillimisht çdo flamur gabimi dhe më pas cin.ignore(1000, '\n') për të hedhur larg çdo gjë që ka mbetur e varur në transmetimin e hyrjes.

inline void keep_window_open() 
{ 
    cout << "\nType a character to exit: "; 
    char ch; 

    cin.clear();
    cin.ignore(1000, '\n');
    cin >> ch; 
}

Shënim

if (val1=='|')
    break;

Ky kod nuk do të jetë kurrë i vërtetë sepse nëse përpiqeni të futni karakterin e tubit, cikli juaj while do të kalojë përpara se të arrini te ai.

07.06.2016
Materiale të reja

Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

Faketojeni derisa ta arrini me të dhënat false
A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

Si të përdorni kërkesën API në Python
Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

Një udhëzues hap pas hapi për të zotëruar React
Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

AI dhe Psikologjia — Pjesa 2
Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

Esencialet e punës ditore të kodit tim VS
Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..