2017-06-08 88 views
1

我对编程相对较新,在尝试编写利用循环的函数时遇到了一个问题。该功能应该如下工作:使用循环外的变量,循环内的值发生变化

数组数据由一个51X2组双数组成,它们都在程序中通过初始for循环,a变量和b变量使用。 X和Y变量都被设置为数组的最小值。

以a和X变量为例,X值与a进行比较并递增,直到它超过a。循环迭代的次数由c变量跟踪。这个c变量然后在Graph数组中使用。 b和Y变量的过程相同。对S的每个值重复此过程以分析来自Data数组的所有数据点。

我遇到的问题是cd变量相对于循环内部的更改没有改变。变量不会从它们的初始值改变。我正在寻找一种解决方案,允许cd变量相对于for循环的迭代次数发生变化。

相关的功能代码可以看到下面:

void Data_Plot(double Data[51][2], char Graph[44][56]) 
{ 
    int N = 50; 
    int S,q,r; 
    int c = 0; 
    int d = 0; 
    double a = Data[S][0]; 
    double b = Data[S][1]; 
    double X = Data[0][0]; 
    double Y = Data[0][1]; 
    for (S=0;S<N;S++) 
    { 
     for(X;X<a;X+=0.1428571429) 
     { 
      c++; 
     } 
     for(Y;Y<b;Y+=2) 
     { 
      d++; 
     } 

     Graph[c][d] = '*'; 
    } 

我知道,我的代码是非常没有优化和杂乱,但我已经完成了这个后,我可以用未来的项目解决这些问题了。

编辑:我想说明的是,我已经尝试过cd被设置为其他值,并且保留为NULL。无论变量初始化如何,都会发生相同的结果。

+1

在'双一访问时,你没有初始化'S' =数据[S] [0];'' – arminb

+1

当你初始化了''和'B'所以你必须S'未初始化未定义的行为 - 任何事情都可能发生,并且确定。此外,在外循环(以及所有后续迭代)的“S == 1”迭代中,“X”已经太大了;你永远不会将它重置回数据[0] [0]。 –

+0

我现在已经初始化S了,谢谢你的支持,但是代码仍然以相同的方式运行。 –

回答

2

由于ab取决于您在for循环期间更改的S,因此需要将这些变量移动到循环中。

void Data_Plot(double Data[51][2], char Graph[44][56]) 
{ 
    int N = 50; 
    int S,q,r; 
    int c = 0; 
    int d = 0; 
    double X = Data[0][0]; 
    double Y = Data[0][1]; 
    for (S=0;S<N;S++) 
    { 
     double a = Data[S][0]; 
     for(X;X<a;X+=0.1428571429) 
     { 
      c++; 
     } 

     double b = Data[S][1]; 
     for(Y;Y<b;Y+=2) 
     { 
      d++; 
     } 

     Graph[c][d] = '*'; 
    } 
+0

这正是我需要的答案,非常感谢!我不会想到,如果他们依赖于S,我将需要循环内的变量。非常感谢。 –

+0

奇怪的是'X'和'Y'不需要每次迭代重置。至少,问题中的“for(X; ...)”和“for(Y; ...)”符号是奇特的。 –

+0

@JonathanLeffler好点。而且每次都需要将'c'和'd'设置回'0'。我真的不明白他在做什么。 – Barmar