Как да изобразя 'enter' в c++


1

Искав след като въведаа едно число въведа знак и друго число като натисна ентър да калкулатора да спре но незнам как да го избразя в цикъла. Малко помощ ако може.

#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<string>
#include<stdlib.h>
#include <limits>
using namespace std;

int main()
{


char op;
std::string s="";
double var1=0 , var2=0, sum=0;

    while (true) {
        switch(op=getch()) {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
            s += op;
            break;
            case '+':
            if(var1 == 0) {
                sscanf ( s.c_str(), "%lf" , &var1);
                s = "";
            } else {
                sscanf ( s.c_str(), "%lf" , &var2);
                cout << var1;
                var1 += var2;

                cout << "+";
                cout << var2;
                cout << "=";
                cout << var1;
                var2=0;
                s="";

            }
            cout << "\n";
            break;
              case '-':
            if(var1 == 0) {
                sscanf ( s.c_str(), "%lf" , &var1);
                s = "";
            } else {
                sscanf ( s.c_str(), "%lf" , &var2);
                cout << var1;
                var1 -= var2;

                cout << "-";
                cout << var2;
                cout << "=";
                cout << var1;
                var2=0;
                s="";

            }
            cout << "\n";
            break;
             case '/':
            if(var1 == 0) {
                sscanf ( s.c_str(), "%lf" , &var1);
                s = "";
            } else {
                sscanf ( s.c_str(), "%lf" , &var2);
                cout << var1;
                var1 /= var2;

                cout << "/";
                cout << var2;
                cout << "=";
                cout << var1;
                var2=0;
                s="";

            }
            cout << "\n";
            break;
              case '*':
            if(var1 == 0) {
                sscanf ( s.c_str(), "%lf" , &var1);
                s = "";
            } else {
                sscanf ( s.c_str(), "%lf" , &var2);
                cout << var1;
                var1 *= var2;

                cout << "*";
                cout << var2;
                cout << "=";
                cout << var1;
                var2=0;
                s="";

            }
            cout << "\n";
            break;
             case ' ':
            cin.ignore( numeric_limits<streamsize>::max(), '\n' );

            cout << "\n";
            break;

            default : cout << s;
        }
    }
    return 0;
}




Отговори



2

Като за начало не използвай conio.h и getch. Също така не смесвай употребата на sscanf и cin/cout.

cin.operator<< прави форматирано четене, тоест игнорира всякакъв whitespace. Предполагам искаш да използваш cin.get() и cin.peek(). Вместо sscanf, може да използваш stringstream или strtol от C стандартната библиотека.


от cuki (7696 точки)