我是初学者,作为练习,我必须编写一个非常简单的计算器,用数字和用户输入的操作符修改堆栈。
这是代码:
#include <stdio.h>
int main (void)
{
long double x, stack = 0;
char op;
printf("Input an operator and a number:\n");
while ( op != 'q' )
{
scanf("%Lf %c", &x, &op);
switch (op)
{
case '+':
stack += x;
printf("= %Lg", stack);
printf("\n");
break;
case '-':
stack -= x;
printf("= %Lg", stack);
printf("\n");
break;
case '*':
stack *= x;
printf("= %Lg", stack);
printf("\n");
break;
case '/':
if (x == 0)
{
printf("Can't divide by 0.");
printf("\n");
break;
}
stack /= x;
printf("= %Lg", stack);
printf("\n");
break;
case 's':
stack = x;
printf("stack set to %Lg", x);
printf("\n");
break;
case 'q':
printf("Bye!\n");
break;
default:
printf("Unknown operator.\n");
break;
}
}
printf("Bye!\n");
return 0;
}
现在的问题是,只要x
不是数字,程序就会循环。为什么?
我怎样才能阻止用户输入x
以外的任何数字?如果x
是char
,我会使用isdigit()
,但事实并非如此。
(顺便说一下,我希望x
成为long double
所以我可以输入带小数的数字。)
答案 0 :(得分:1)
RecyclerView recycler = findViewById(...);
recycler.setRecycledViewPool(((YourActivity)getActivity()).getSharedRecycledViewPool());
将尽可能多地转换字符串中的值。如果无法转换,则会停止处理字符串。无论哪种方式,该函数都会返回一个值,指示转换了多少个值。
如果第一个值(scanf()
)不是数字且无法转换,则会停止。因此第二个值(x
)不会改变。这会导致你的循环继续。
检查op
返回的值以自行确认此行为。
另外,&#34;我希望x是一个long double,所以我可以输入带小数的数字&#34; - 类型scanf()
和float
的值也是支持带小数的数字。
最后,正如其他人指出的那样,你应该在代码开始时初始化double
,然后再测试它是否等于&#34; q&#34;。这将确保价值符合您当时的预期。