【发布时间】:2021-06-01 14:40:08
【问题描述】:
我正在编写一个简单的计算器程序,以便用户进入程序自己的控制台环境。每个新行都以 $ 开头。用户将输入诸如 '''sum(x,y)''' '''mul(x,y)''' 等命令,程序将 x 和 y 作为双精度并执行一个函数,即 ''' double mul(x, y){return x*y)''' 并显示返回值。
我已经让它根据匹配字符串中的前三个字符正确识别命令。
无论我做什么,我似乎都无法正确读取数值。任何建议都非常感谢!
下面的代码来自 main()
printf("%s", " $ ");
fgets(input, sizeof(input), stdin);
sscanf(input,"(%d,%d)",&arg1,&arg2);
if(strstr(input,"sum")){
//char *starting_pos = strchr(input,dlm);
//int position = (starting_pos == NULL ? -1 : (uintptr_t)starting_pos);
//arg1 = input[position + 1];
//arg2 = input[position + 3];
printf("DEBUG: arg1 is %d arg2 is %d\n", arg1,arg2);
double output = sum(arg1,arg2);
printf("DEBUG: Output should be: %d\n", output);
printf("%d\n",output);
}else if ...
评论部分是我尝试的另一种方式的残余。如果有人能告诉我这样做的正确方法是什么,我将不胜感激。
【问题讨论】:
-
arg1和arg2应该被声明为double,并且%lf应该被用在sscanf中,而不是%d。sscanf的返回值也应该检查过。 -
如果你想要
double值,那么为什么sscanf(input,"(%d,%d)",&arg1,&arg2);将arg1和arg2解析为int?为什么不char op[32]; ... if (sscanf(input,"%31[^(](%lf,%lf)", op, &arg1, &arg2) == 3) { /* valid op and args */ }?
标签: c linux string input terminal