- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试通过命令行提供表达式来编写 rpn 计算器的学校作业。例如 ./calc 2 + 5\* sin 78
我的想法是使用struct
数据类型来保留数字值或运算符类型。这里主要澄清一下:
#include <stdlib.h>
#include <math.h>
#include <string.h>
enum OPERATORS {val, PLUS, MINUS, MULTI, DIV, SIN, COS};
typedef struct value {
double number;
enum OPERATORS oper;
};
void get_the_onp(char *expression[], int length);
int main(int argc, char* argv[]) {
double result;
int i;
printf("Number of arguments: %d\n", argc);
get_the_onp(argv, argc);
//result = equation(argv, argc);
//printf("Result is: %f", result);
return 0;
}
当我运行 get_the_onp()
函数时,atof()
没有像我怀疑的那样工作。这是 get_the_onp()
:
void get_the_onp(char* expression[], int length) {
int i, j, k; //iterators i for expression; j for numbers; k for operators
char *current;
struct value values[length];
for (i=1; i<length; i++) {
current = expression[i];
//printf("%f\n", atof(expression[i]));
if (atof(current) != 0 && current != '0') {
//printf("Inside if: %f\n", atof(current));
values[i-1].number = (double) atof(current);
values[i-1].oper = val;
}
else{
switch(current[0]){
case '+':
//values[i].number = NULL;
values[i-1].oper = PLUS;
break;
case '-':
//values[i].number = NULL;
values[i-1].oper = MINUS;
break;
case '*':
//values[i].number = NULL;
values[i-1].oper = MULTI;
break;
case '/':
//values[i].number = NULL;
values[i-1].oper = DIV;
break;
case 's':
//values[i].number = NULL;
values[i-1].oper = SIN;
break;
case 'c':
//values[i].number = NULL;
values[i-1].oper = COS;
break;
}
}
}
//tester
for (i=0; i<length; i++) {
//if (values[i].oper != val)
printf("Operator: %d\n", values[i].oper);
printf("Number is: %d\n", values[i].number);
}
return;
}
示例表达式的输出是:
Number of arguments: 7
Operator: 0
Number is: 2147483636
Operator: 1
Number is: 2147483636
Operator: 0
Number is: 2147483636
Operator: 3
Number is: 2147483636
Operator: 5
Number is: 2147483636
Operator: 0
Number is: 2147483636
Operator: -2072959800
Number is: 2147483626
我猜指针 current
有什么东西,但我不知道现在该去哪里。
最佳答案
问题就在这里:
printf("Number is: %d\n", values[i].number);
values.number
的类型为 double
(64 位),但您将其打印为 int
(32 位),它调用未定义的行为。
关于c - atof() 在需要是 double 值的地方分配 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23823218/
我需要将字符串转换为 float 。如果字符串不是数字,我希望返回 0。 我尝试使用以下代码测试 atof() 函数是否适用于此: printf("%f", atof("1a")); 根据我对atof
我写了一个atof函数,名为atof_beta。我运行它,但结果与atof的结果不一样。 例如:输入:1111111111111111111111111111111111111111111111111
我的 Atof 功能有问题。我正在尝试将字符串转换为 float ,但当我在 Coocox 软件的“调试”部分中尝试时,它没有给出任何错误,输出没有显示任何内容。我尝试了两个函数Atoi和Atof。当
示例.c: #include #include main() { char str[10] = "111.1"; float f = (float)atof(str); pri
我试图使用 atof() 将字符串转换为 double (显然),但结果不是我所期望的。以下是 atof() 之前有关变量值的代码和调试信息: d = atof (arg); next.db = d;
输入文件应以后缀顺序指定单个代数表达式,支持正浮点值和负浮点值以及以下运算:加法 (+)、减法 (-)、乘法 (*)、除法 (/)。所有浮点值和操作都应以空格分隔。我必须扫描以下行: 4 5 + 20
我有一个问题基本上让我感到困惑。首先,我有两个全局数组 - trustArray[] 和 fashionArray[]。这是填充 trustArray 的函数: void getTrust() {
我有一个例程,它获取指数格式的数字(例如 2,5E-02 或 4E+06)作为 QString。当我打印值时,我总是只得到整数,当它们小于 1 时,我总是得到 0。有谁知道我在这里做错了什么?(对于
我正在使用一个库将 Wavefront .obj 文件加载到我的 OpenGL 应用程序中 (tinyobjloader)。我注意到加载对象时出错。当我加载一个坐标为例如的对象时。 0.9999999
在我的 C++ 程序中,我需要创建一个名为 ComplexNumber 的类来保存复数的信息。我已经在头文件中编写了所有函数,并将这些函数移到了 .cpp 文件中。 我当前程序的 atof 函数不起作
我继承了一些代码(从已经离开的人那里)并找到了这个小片段: double minX = xVal.find('.') == string::npos ? (double)atoi(xVal.c_str
我似乎遇到了一些奇怪的问题,atof() 函数无法正确转换某些值。对于相同的值,atoi() 完美运行。 这是我正在做的事情的一小段: ... // frequencies is a std::str
我的问题如下。我尝试将字符串转换为 double 。这样: string str = "1.1"; double d = atof(str.c_str()); 但这不起作用,它只是返回 1; 但如果我
比如说,我有一个(德语)表达式,它显示为 10.401,40(in Mio EUR),我想将其转换为真正的 float (在本例中约为 100 亿) python 。 这是我到目前为止所拥有的: im
所以我使用 atof 将我的字符串转换为 double 。但我需要知道我是否输入错误(如 y564 等)。我怎样才能检查它?我需要正确的号码才能对其进行进一步操作。 double x = atof(s
using namespace std; int main(int argc, char *argv[]) { char c[] = {'0','.','5'}; //char c[]
我正在尝试使用 atof 在 c 语言中将字符数组转换为 double 组并接收不明确的输出。 printf("%lf\n",atof("5")); 打印 262144.000000 我惊呆了。有人可
我正在解析固定 NMEA 句子中的 GPS 状态条目,其中地理分钟的一小部分总是在句点之后。但是,在语言环境将逗号定义为小数分隔符的系统上,atof 函数会忽略句点和整数部分。 处理此问题的最佳方法是
我有一个 Arduino,它从我的智能手机(通过蓝牙)接收一条包含 unix 时间戳的消息。现在,我正在尝试将我的 DS1307 与该时间戳同步。 但是,它不起作用,因此,我开始搜索并在将包含时间戳的
我想我只是太笨了(我都试过了)。帮我离开这里: #include #include int main() { const char * y = "747.0"; double x;
我是一名优秀的程序员,十分优秀!