Bjarne Stroustrup'un C++ kitabında bir kod örneğini taklit eden bir program yapmaya çalışıyorum. Bu, değerlendirilmesi gereken daha uzun ifadeleri ayrıştırabilen bir hesap makinesi yapmak için ilk yaklaşımdır. Henüz operatörün önceliği umurumda değil ve şu anki kodumla ilgili bir sorunu anlamaya çalışıyorum. İşte burada:Bu program neden 3 satırlık girdi gerektiriyor?
#include <iostream>
using namespace std;
int main() {
cout << "Expression: ";
int lval = 0; //left-hand value
int rval; // right-hand value
char op;
cin >> lval; //read leftmost operand
while (cin>>op) { //read operator and righ-hand operand repeatedly
cin >> rval;
switch (op) {
case '+':
lval += rval; //add: lval = lval+rval
break;
case '-':
lval -= rval; //subtract: lval = lval-rval
break;
case '*':
lval *= rval; //multiply: lval =lval*rval
break;
case '/':
lval /= rval; // divide: lval = lval/rval
break;
default: // not another operator: print result
cout << "Result: " << lval << '\n';
return 0;
}
}
return 0;
}
ben derlemek ve programı çalıştırdığınızda, hep örneğin girişin iki ekstra satırları eklemeniz gerekir:
$ ./calculator
>Expression: 1+2+3
>
>
[I can keep pressing enter as many times as I wish until I type in 2 more lines]
>l
>l
>Results: 6
neden program bu şekilde davranıyor? \n
karakteri okunduğunda neden cin>>op
yanlış döndürülüyor?
ben kitaptan while(cin>>op)
bölümünü kopyalanan çünkü beni karıştırır.
İki sorunları var 'boşluk onun tarafından atılır beri size döngü sona erdirmek amacıyla operatörden biri olmayan bir şeyi girmelisiniz böylece cin >> op', bir' \ n 'ayıklamak asla. İkinci problem, bir operatör bulamadığınız zaman bile, her zaman * bir sağ taraftaki işlenende okumanızdır. Bu yüzden iki satır yazmanız gerekiyor – melak47