2013-11-04 34 views
-5

再次抱歉,我在编程方面并不是什么天才。尽管用户输入,我的数组仍然是随机值

首先总结一下:数组输入。两个3D矢量......哈哈,让我们用矢量来计算MORE矢量。无论如何:点积只是普通的可笑(小数点前9个数字;我的意思是,我从未想过1x8 + 7x5 + 4x2可能有9个数字)。 Cross产品......更糟糕。

我做了......呃......我怎么称呼它?那么,我们称之为“traza”。为了理解,我将翻译一个定义:代码的“traza”告诉我们它的执行指令的顺序,以及在每行代码后变量是如何变化的。你知道,包含变量和数字标记的表格引用了代码行,我们看看代码是否在做一些意想不到的事情。切入点:就我所能看到的而言,这一切都很好。

然后,我用一个打印命令和向量中的每个值做了一个意想不到的“pseudotraza”。在输入之后和te dot产品之前(在一个函数中)。猜猜是什么: 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; 
} 
+6

如果您可以将聊天聊天减少到最低限度,那么这个问题会更具可读性。只是事实。 –

+0

另外,这里没有实际的问题,我可以看到。 –

+0

在introduirVector()和producteEscalar()中,使用局部变量而不是传递给函数的数据。但是,接下来你遇到的问题是你通过价值而不是参考传递,所以你的介绍矢量无法改变传递给它的矢量。 – Ross

回答

2

问题是这样的:

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

此功能需要一个Vector作为参数,但矢量没有名字,因此它不能在函数内部使用。

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

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

首先,你应该使用你被调用的参数,而不是局部变量。但是你的第二个问题是你正在使用pass by value。当你调用这个函数时,introduirVector (v1);它是而不是你知道并且主要关注你在introduirVector里面工作的“v1”,但是当你的函数返回时,它的一个本地副本不再存在。

你需要做的是让你的函数接受一个指针或到Vector的引用现在被称为有:

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

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

0

我没有看到任何投入,这将是你为什么不接受任何输入。

尝试使用:

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 
+0

输入介绍向导()。看到“cin >> v [i];” – Ross

+0

哦,我的不好,所以问题是他传递的是一个矢量,而不是指向矢量的指针。这导致编辑范围不断变化的变量。渲染它无效 –

+0

这是问题之中的是。 cin仅用于局部变量...传递给函数的数据不被使用。传递的数据是通过值传递的,而不是引用...等等 – Ross

相关问题