无论用户输入,我的数组都会接受随机值

My array takes random values despite user input

本文关键字:随机 数组 用户 输入 我的      更新时间:2023-10-16

再打扰一下,我不是编程方面的天才。

首先,总结一下:数组输入。两个 3D 矢量...哈哈,让我们使用向量来计算更多向量。无论如何:点积是公正而荒谬的(小数点前九个数字;我的意思是,说真的,我从来没有想过 1x8+7x5+4x2 可以有九个数字)。交叉产品是...更糟糕的是。

我做了...呃......我怎么称呼它?好吧,我们称之为"traza"。我将翻译一个定义 ir 顺序来理解:代码的"traza"告诉我们其执行的指令顺序,以及变量在每行代码后如何变化。你知道,带有变量和数字标记的表格指的是代码行,我们在其中查看代码是否正在做一些意外的事情。切中要害:据我所知,一切都很好。

然后,我用打印命令和向量中的每个值制作了一个出乎意料的"伪 traza"。就在输入之后和点积之前(在函数中)。你猜怎么着:1)这不是我的输入,在他们中的任何一个2)它们甚至不是相同的值3)第一个值离我的输入很远,但接下来的值至少更合乎逻辑(与输入的差异较小)。

我今天早上,12小时前,学会了使用数组/向量/任何东西。我从来没有需要在输入之前将任何值设置为 0 作为默认值。但这是我以前遇到这样的事情时唯一知道要做的事情。(总有一天你们中的任何一个人会成为我的编程老师,你们比他更了解我......请原谅我糟糕的语法,西班牙的英语教学只是"在上个高中年采取一些语法规则和不超过 50 个练习......这就是你通过大学入学考试所需要的一切!

#include <iostream>
using namespace std;
#include <stdlib.h>
const int N = 3;
typedef int Vector[N];
void introduirVector (Vector);
float producteEscalar (const Vector, const Vector); /*Input vector and dot product*/
int main (void)
{
 Vector v1, v2;
 float p_esc;
 cout << "Introduim les dades del vector A: "; /* Input */
 introduirVector (v1);
 cout << "Introduim les dades del vector B: "; /* 2x Input combo */
 introduirVector (v2);
 cout << v1[0] << "n" << v1[1] << "n" << v1[2] << "n" << v2[0] << "n" << v2[1] << "n" << v2[2] << endl; /* "Puseudotraza*/
 p_esc= producteEscalar (v1, v2); /*Dot product*/
 cout << "El producte escalar: " << p_esc; /*Dot product is...*/
 system ("PAUSE");
 return 0;
}
/*3x Input combo*/
void introduirVector (Vector)
{
    int i;
    Vector v;
    for (i = 0; i < N; i++)
    {
     cin >> v[i];
    }
    return;
}
 /* Dot product (why all the Vectors are set as constants but another after this is not set? It's the hint given by the teacher, my (not) beloved teacher...they gave us the main function and the other function's prototypes, but that's all) */
float producteEscalar (const Vector, const Vector)
{
   float escalar;
   Vector v1, v2;
 /* Pseudotrazas for all*/
   cout << v1[0] << "n" << v1[1] << "n" << v1[2] << "n" << v2[0] << "n" << v2[1] << "n" << v2[2] << endl;
/* Dot product and all that */
   escalar = (v1[0]*v2[0])+(v1[1]*v2[1])+(v1[2]*v2[2]);
   return escalar;
}

问题是这样的:

/*3x Input combo*/
void introduirVector (Vector)
{
    int i;
    Vector v;

此函数将Vector作为参数,但 Vector 没有名称,因此不能在函数内部使用。

然后,您声明一个新的本地Vector v。您将用户的输入读入此向量。

然后函数结束,此时您读取用户输入的向量消失。

首先,您应该使用调用您的参数,而不是局部变量。但是您的第二个问题是您使用的是按值传递。当你调用这个函数时,introduirVector (v1);不是你在 introduirVector 内部使用的 main 中知道和喜爱的"v1",而是它的本地副本,当你的函数返回时,它就不复存在了。

你需要做的是让你的函数接受一个指针或对它被调用的 Vector 的引用:

void introduirVector(Vector& v)
{
    for (size_t i = 0; i < 3; ++i) {
        cin >> v[i];
    }
}

这并不能完全解决代码的所有问题,但它应该会让你继续前进。

我没有看到任何输入,这就是您没有收到任何输入的原因。

尝试使用:

string inpt;
int a, b, c;
cin >> inpt;
a = atoi( inpt.c_str());
inpt = "";
cin >> inpt;
b = atoi( inpt.c_str());
// etc...
// Make your vector in this fashion, grabbing each integer separately then loading them
// into a vector