【发布时间】:2018-01-12 03:02:51
【问题描述】:
我正在编写一个程序,它接收 3 个用户输入的二次方程值,进行一些计算,并返回二次方程的根数。
当我打印 *(point) 时,它会从函数中给我正确的值。
但是,当我在 If 条件中使用 *(point) 时,它似乎并没有按我想要的方式工作 - 我相信 *(point) 总是某个正数,因此为什么它总是执行那个特定的 if 条件.
用户值:a = 9、b = -12、c = 4 应该打印出来这个二次有 1 个根。 并且值:a = 2、b = 16、c = 33 应该打印出 这个二次方有 2 个根。 但程序总是打印出 这个二次方有 0 个根。 无论输入什么值。
这是我的代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
float *quadratic(float a1[]);
int main()
{
float a1[3] = {};
float *point;
cout << "Enter a: ";
cin >> a1[0];
cout << "\nEnter b: ";
cin >> a1[1];
cout << "\nEnter c: ";
cin >> a1[2];
point = quadratic(a1);
cout << endl << "d = " << *(point) << endl;
if (*(point) < 0) {
cout << "\nThis quadratic has 2 roots.\n";
}
else if (*(point) > 0) {
cout << "\nThis quadratic has 0 roots.\n";
}
else { //else if *(point) is equal to 0
cout << "\nThis quadratic has 1 root.\n";
}
return 0;
}
float *quadratic(float a1[]) {
float d;
d = (a1[1] * a1[1]) - (4 * a1[0] * a1[2]);
float xyz[1] = { d };
return xyz;
}
【问题讨论】:
-
你不应该在这里使用指针
-
您不能从函数返回指向本地数组的指针。函数退出时数组被销毁。
-
您正在返回一个悬空指针。使用
std::vector(可复制)而不是原始数组(不可复制)。对原始指针和原始数组等说不。 -
为什么不只返回一个双倍
标签: c++ pointers if-statement