xhtxhtxht 发表于 2021-7-9 16:56:26

请删帖。

本帖最后由 xhtxhtxht 于 2023-1-25 15:33 编辑


请删帖。
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc,char * argv[])
{
        if(argc == 1){
                printf("请输入一元二次方程的标准形式下的二次项系数,一次项系数和常数项!");
                return 0;
        }
        if(argc != 4){
                printf("输入的参数不符合规则!");
                exit(1);
        }
        int nums = {0};
        for(int count = 0;count < 4;count++)
                nums = atoi(argv);
        float delta;
        delta = nums * nums - 4 * nums * nums;
        if(delta < 0){
                printf("无解!");
                return 0;
        }
        float x1,x2;
        x1 = (-nums + sqrt(delta)) / (2 * nums);
        x2 = (-nums - sqrt(delta)) / (2 * nums);
        printf("x1 = %.2f\nx2 = %.2f",x1,x2);
        return 0;
}


windows gcc正常编译,linuxgcc加-lm也可以,但是运行时段错误

人造人 发表于 2021-7-9 17:05:50

这个程序应该怎么用?
执行的时候输入什么?

MZZ666 发表于 2021-7-11 13:13:55

啥意思?啥是段错误?

赚小钱 发表于 2021-7-11 14:14:24

      if(argc != 4){
                printf("输入的参数不符合规则!");
                exit(1);
      }
      int nums = {0};
      for(int count = 0;count < 4;count++)
                nums = atoi(argv);

你这是越界了啊,你要求 argc == 4,argv 只能索引 0 - 3 ,但是你 +1 就越界了。

命令行参数 argv 是程序名称

赚小钱 发表于 2021-7-11 14:17:24

赚小钱 发表于 2021-7-11 14:14
你这是越界了啊,你要求 argc == 4,argv 只能索引 0 - 3 ,但是你 +1 就越界了。

命令行参数 argv

改成 for int count = 0; count < 3; count++

Kayko 发表于 2021-7-12 11:50:51

嘿嘿

xhtxhtxht 发表于 2021-7-18 22:14:49

赚小钱 发表于 2021-7-11 14:14
你这是越界了啊,你要求 argc == 4,argv 只能索引 0 - 3 ,但是你 +1 就越界了。

命令行参数 argv

感谢大神指正!
页: [1]
查看完整版本: 请删帖。