繁体   English   中英

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

[英]c: How to use sscanf to read the command-line argument (x,y) and store x and y as separate doubles inside a struct?

我正在研究一个复数计算器。 用户必须使用命令行将复杂操作数作为 arguments 传递给主 function。 此外,数字需要准确地以这种表示法(x,y)传递,其中 x 是数字的实部,y 是虚部。

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

目前,我专注于能够从命令行参数中存储至少一个复数。 我希望这里有人能引导我朝着正确的方向前进。 这是我的代码部分,它处理从 argv 读取并存储在我的 struct complex variable 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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM