c: 如何使用 sscanf 读取命令行参数 (x,y) 并将 x 和 y 作为单独的双精度存储在结构中?

问题描述

我正在研究一个复数计算器。用户必须使用命令行将复杂操作数作为参数传递给主函数。此外,数字需要完全以这种符号 (x,y) 传递,其中 x 是数字的实部,y 是虚部。

我为复数创建了一个结构体。我相信我必须使用 sscanf 从 argv 读取并将值存储到我的 struct 复杂变量(将保存要操作的数字)的相应实部和虚部中,但我一直无法实现它,尤其是在使用括号格式时。

目前我专注于能够从命令行参数中存储至少一个复数。我希望这里有人可以引导我走向正确的方向。这是我处理从 argv 读取并存储在我的结构复杂变量 struct complex c

中的代码部分
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct complex {
    double real;
    double imag;
};

int main(int argc,char *argv[]) {

    struct complex c;
    sscanf(argv,"(%lf,%lf)",&c.real,&c.imag);
    printf("%.2lf %.2lf \n",c.real,c.imag);
    return 0;
}

我已经尝试在 sscanf 的参数中使用不同的变体,但到目前为止我只成功地存储了一个双精度(对应于数字的实部的那个)并且只有当用户不使用括号。我该如何进行?

解决方法

我认为最好将参数作为整个字符串 (%s) 读取然后进行处理。 但如果您坚持使用 sscanf,您可以尝试使用它。

但请记住,当你传递像 (1,2) 这样的参数时,像这样的命令会认为它是一个参数,所以你需要传递像 (1,2) 这样的东西 - 它在逗号和 2 之间有空格。不要忘记检查您是否有 3 个参数。

   struct complex 
   {
        double real;
        double imag;
   };
    
   int main(int argc,char *argv[]) 
   {
    
        struct complex c;
        if(3 == argc)
        {
            sscanf(argv[1],"(%lf,",&c.real);
            sscanf(argv[2],"%lf)",&c.imag);
            printf("%.2lf %.2lf \n",c.real,c.imag);
        }
        return 0;
    }