📄 test2.cpp
字号:
#include <stdio.h>
#include <cstring.h>
#include <units.h>
#include <ReadLine.h>
#include <Help.h>
void main(void)
{ UnitFraction left, right;
float leftV, rightV;
char s[50], c;
unsigned int i, j;
UNIT context[5];
Lines l;
Open(l, NULL);
Fact("Miles", "Kilometers", 1.60935);
Fact("Meters", "Yards", 1.093611);
Fact("Miles", "Feet", 5280.0);
Fact("Feet", "Inches", 12.0);
Fact("Kilometers", "Meters", 1000.0);
Canonical(LENGTH, "Meters");
context[LENGTH] = Tag("Meters");
left.numerator = 1L; left.denominator = 0L;
left.value = 0.0;
for ( ;; ) {
if (scanf("%s",s)!=1) break;
c = s[0];
if ((c=='z')||(c=='Z')) {
left.numerator = 0L; left.denominator = 0L;
left.value = 0.0;
continue;
/* } else if (c=='?') {
i = 0; j = 0;
for (; i<lengthLimit; i=i+1) {
assert(Name(UNIT(LONG(i)),s)>0);
INC(j, String.Length(s)+1);
if (j>=80) {InOut.WriteLn(); j=String.Length(s)+1;};
InOut.WriteString(s);
};
InOut.WriteLn();
continue;*/
};
if (Read(l,s)<=0) break;
if (Read(s, 0, right)<=0) break;
/*
u = Tag(s);
if (UNIT(u)==NOUNIT) break;
if (u<LONG(lengthLimit)) {
bit=LENGTH;
last[LENGTH] = u;
} else assert(false);
current = TRUNC(canonical[bit]);
rightV = rightV/Convert(UNIT(LONG(current)), UNIT(u));
right.numerator = mask[bit]; right.denominator = 0L;
*/ switch (c) {
case '+':
if (!Match(0L, left, right)) HALT;
INC(left.value, right.value);
break;
case '-':
if (!Match(0L, left, right)) HALT;
DEC(left.value, right.value);
break;
case '*':
left.value = left.value*right.value;
if (!Match(2L, left, right)) HALT;
break;
case '/':
left.value = left.value/right.value;
if (!Match(1L, left, right)) HALT;
break;
};
Unitsprintf(context, left, rightV, s);
printf("%f %s\n", rightV, s);
};
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -