鱼C论坛

 找回密码
 立即注册
查看: 2244|回复: 3

[已解决]大佬们萌新求救一道带参数main函数的题实在看不懂

[复制链接]
发表于 2020-12-16 10:23:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请编写一个程序:把程序build后生成的可执行文件(假设文件名为mycal.exe)放到C盘根目录下,在命令行提示符下,转到c:\下
,键入mycal  100+200 运行的结果为 300.00;键入mycal  100*200 运行的结果为20000.00 等。
程序中的运算符与C语言中的运算符在字符上保持一致。计算结果保留小数点后两位有效数字。


本程序的源文件包含两个,1个是main函数所在的源文件main.c,另一个是对一个字符串进行解析的函数的定义源文件myfun.c,你只需要在理解main.c中代码的基础上,在右侧代码区给定的地方完成myfun.c中的代码即可(你也可以删除已有代码,按照你的思路从零开始)。main.c的代码如下:

#include<stdio.h>
void processUserInputStr(char* s);
int main(int argc,char* argv[])
{
    processUserInputStr(argv[1]);
    return 0;
}
开始你的任务吧,祝你成功!


#include<string.h>
#include <stdlib.h>
//s:一个形如a[运算符]b的字符串,例如:4.5+9,6-9,4/5,8*7...
//该函数经过处理,输出数的运算结果,例如若s为"20.3+1",则该函数在屏幕上输出21.30(保留小数点后面2位有效数字
//此函数内部操作的基本算法为:
//第1步:找到运算符对应的位置索引
//第2步:根据运算符位置,将其前面的字符串复制到strA,后面的字符串复制到strB
//第3步:将strA,strB转换为数值(使用函数atof,具体用法请百度)a,b
//第4步:根据运算符,对a,b进行相应的运算
//第5步:输出运算结果result
void  processUserInputStr(char* s)
{
        int len=strlen(s); //s中有效字符的个数
    //strA,strB分别用于存放两个操作数对应的字符串
    char strA[100],strB[100];
    //a,b分别用于存放将字符串转换后的数,result用于保存运算结果
    double a,b,result;
    char op;//用于存储s中的运算符对应的字符串
    int k,posOp;//posOp:符号的位置索引
    /**********begin**********/
   
   
    /**********end**********/
}


感觉真不怎么看得懂,哪位大佬愿意出来为小弟指点迷津啊
最佳答案
2020-12-16 11:03:36
本帖最后由 jackz007 于 2020-12-16 11:12 编辑
  1.     /**********begin**********/
  2.         int i , j                                                                                             ;
  3.         for(i = 0 ; i < len && s[i] != '+' && s[i] != '-' && s[i] != '*' && s[i] != '/'; i ++) strA[i] = s[i] ;
  4.         strA[i] = '\0'                                                                                        ;
  5.         if(i < len) {
  6.                 op = s[i ++]                                                                                  ;
  7.                 for(j = 0 ; i < len ; i ++ , j ++) strB[j] = s[i]                                             ;
  8.                 strB[j] = '\0'                                                                                ;
  9.                 a = atof(strA)                                                                                ;
  10.                 b = atof(strB)                                                                                ;
  11.                 switch(op) {
  12.                         case '+' : result = a + b ; break                                                     ;
  13.                         case '-' : result = a - b ; break                                                     ;
  14.                         case '*' : result = a * b ; break                                                     ;
  15.                         case '/' : result = a / b ; break                                                     ;
  16.                 }
  17.                 printf("%.2f\n" , result)                                                                     ;
  18.         } else {
  19.                 fprintf(stderr , "expression error !\n")                                                      ;
  20.         }               
  21.     /**********end**********/
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-16 11:03:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-12-16 11:12 编辑
  1.     /**********begin**********/
  2.         int i , j                                                                                             ;
  3.         for(i = 0 ; i < len && s[i] != '+' && s[i] != '-' && s[i] != '*' && s[i] != '/'; i ++) strA[i] = s[i] ;
  4.         strA[i] = '\0'                                                                                        ;
  5.         if(i < len) {
  6.                 op = s[i ++]                                                                                  ;
  7.                 for(j = 0 ; i < len ; i ++ , j ++) strB[j] = s[i]                                             ;
  8.                 strB[j] = '\0'                                                                                ;
  9.                 a = atof(strA)                                                                                ;
  10.                 b = atof(strB)                                                                                ;
  11.                 switch(op) {
  12.                         case '+' : result = a + b ; break                                                     ;
  13.                         case '-' : result = a - b ; break                                                     ;
  14.                         case '*' : result = a * b ; break                                                     ;
  15.                         case '/' : result = a / b ; break                                                     ;
  16.                 }
  17.                 printf("%.2f\n" , result)                                                                     ;
  18.         } else {
  19.                 fprintf(stderr , "expression error !\n")                                                      ;
  20.         }               
  21.     /**********end**********/
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-16 16:36:01 | 显示全部楼层

好的解决了感谢大佬帮忙
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-16 16:39:11 | 显示全部楼层
猫儿恋上鱼 发表于 2020-12-16 16:36
好的解决了感谢大佬帮忙

        兄弟客气了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 20:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表