在C代码中if ifif语句的问题,只执行最后一种情况中的部分语句

时间:2015-06-05 08:46:07

标签: c if-statement

我在C语言中使用以下if-elseif语句有一个问题,我使用Altera Monitor程序作为编译器,因为它用于编程Altera开发板中的Nios II处理器。以前,当我只有四个选项值'u'(你可以是1,2,3或4)时,我使用switch语句,它完美地工作。现在,我需要三组u('u1,u2和u3,每个你也可以是1,2,3或4),switch语句不再起作用,我不知道为什么只允许一个switch语句我不能使用三个switch语句,所以我从switch更改为if ifif,如下所示......

这里的问题是,它适用于'u1'的所有四种情况以及'u2'的所有四种情况,当'u3'为4时,问题出现在'u3'的最后一种情况。我发送数据使用UART连接到串口,所以我知道当u3 == 4时,数据会被发送,但是会丢失一些字符......

我在这里发布的代码是冗长的,但实际上对于u1,u2和u3的三种情况做了同样的事情,但我认为显示所有这些代码是合适的

输出错误如图所示,只有数据12的值和格式不正确,其他11组显示了预期的格式: enter image description here

编辑:重要的是,对于txdata12,对于所有试验,只有最后十个ascii字符被正确显示,前16位数字是错误的。

编辑:声明是:

int b=26;
unsigned char txdata1 [b];
unsigned char txdata2 [b];
unsigned char txdata3 [b];
unsigned char txdata4 [b];
unsigned char txdata5 [b];
unsigned char txdata6 [b];
unsigned char txdata7 [b];
unsigned char txdata8 [b];
unsigned char txdata9 [b];
unsigned char txdata10 [b];
unsigned char txdata11 [b];
unsigned char txdata12 [b];

分配值的代码,例如每个arr1_v [3]对于每组数据是不同的,并且它们不是恒定的     int qq = 26;

if (u1==1)

     {int MAT1[]={0,1,10, arr1_v[3], arr1_v[2], arr1_v[1],arr1_v[0],-1,arr1_q[7],arr1_q[6],arr1_q[5],arr1_q[4],arr1_q[3],arr1_q[2],arr1_q[1],arr1_q[0],-1,arr1_soc[3],arr1_soc[2],arr1_soc[1],arr1_soc[0],-1,arr1_index[1],arr1_index[0], -35,-38};
for ( i = 0 ; i < qq ; i++ ) txdata1[i] = MAT1[i];  }

else if (u1==2)

    {int MAT2[]={0,2,10, arr1_v[3], arr1_v[2], arr1_v[1],arr1_v[0],-1,arr1_q[7],arr1_q[6],arr1_q[5],arr1_q[4],arr1_q[3],arr1_q[2],arr1_q[1],arr1_q[0],-1,arr1_soc[3],arr1_soc[2],arr1_soc[1],arr1_soc[0],-1,arr1_index[1],arr1_index[0], -35,-38};
for ( i = 0 ; i < qq ; i++ ) txdata2[i] = MAT2[i];  }

else if (u1==3)

    {int MAT3[]={0,3,10, arr1_v[3], arr1_v[2], arr1_v[1],arr1_v[0],-1,arr1_q[7],arr1_q[6],arr1_q[5],arr1_q[4],arr1_q[3],arr1_q[2],arr1_q[1],arr1_q[0],-1,arr1_soc[3],arr1_soc[2],arr1_soc[1],arr1_soc[0],-1,arr1_index[1],arr1_index[0], -35,-38};
    for ( i = 0 ; i < qq ; i++ ) txdata3[i] = MAT3[i];  }

else if (u1==4)

    {int MAT4[]={0,4,10, arr1_v[3], arr1_v[2], arr1_v[1],arr1_v[0],-1,arr1_q[7],arr1_q[6],arr1_q[5],arr1_q[4],arr1_q[3],arr1_q[2],arr1_q[1],arr1_q[0],-1,arr1_soc[3],arr1_soc[2],arr1_soc[1],arr1_soc[0],-1,arr1_index[1],arr1_index[0], -35,-38};
    for ( i = 0 ; i < qq ; i++ ) txdata4[i] = MAT4[i];  }



u2=h2+1;
if (u2==1)

    {int MAT5[]={0,5,10, arr2_v[3], arr2_v[2], arr2_v[1],arr2_v[0],-1,arr2_q[7],arr2_q[6],arr2_q[5],arr2_q[4],arr2_q[3],arr2_q[2],arr2_q[1],arr2_q[0],-1,arr2_soc[3],arr2_soc[2],arr2_soc[1],arr2_soc[0],-1,arr2_index[1],arr2_index[0], -35,-38};
    for ( i = 0 ; i < qq ; i++ ) txdata5[i] = MAT5[i];   }

else if (u2==2)

    {int MAT6[]={0,6,10, arr2_v[3], arr2_v[2], arr2_v[1],arr2_v[0],-1,arr2_q[7],arr2_q[6],arr2_q[5],arr2_q[4],arr2_q[3],arr2_q[2],arr2_q[1],arr2_q[0],-1,arr2_soc[3],arr2_soc[2],arr2_soc[1],arr2_soc[0],-1,arr2_index[1],arr2_index[0], -35,-38};
    for ( i = 0 ; i < qq ; i++ ) txdata6[i] = MAT6[i]; }

else if (u2==3)

    {int MAT7[]={0,7,10, arr2_v[3], arr2_v[2], arr2_v[1],arr2_v[0],-1,arr2_q[7],arr2_q[6],arr2_q[5],arr2_q[4],arr2_q[3],arr2_q[2],arr2_q[1],arr2_q[0],-1,arr2_soc[3],arr2_soc[2],arr2_soc[1],arr2_soc[0],-1,arr2_index[1],arr2_index[0], -35,-38};
     for ( i = 0 ; i < qq ; i++ ) txdata7[i] = MAT7[i];  }

else if (u2==4)

    {int MAT8[]={0,8,10, arr2_v[3], arr2_v[2], arr2_v[1],arr2_v[0],-1,arr2_q[7],arr2_q[6],arr2_q[5],arr2_q[4],arr2_q[3],arr2_q[2],arr2_q[1],arr2_q[0],-1,arr2_soc[3],arr2_soc[2],arr2_soc[1],arr2_soc[0],-1,arr2_index[1],arr2_index[0], -35,-38};
    for ( i = 0 ; i < qq ; i++ ) txdata8[i] = MAT8[i];  }


u3=h3+1;

if (u3==1)

    {int MAT9[]={0,9,10, arr3_v[3], arr3_v[2], arr3_v[1],arr3_v[0],-1,arr3_q[7],arr3_q[6],arr3_q[5],arr3_q[4],arr3_q[3],arr3_q[2],arr3_q[1],arr3_q[0],-1,arr3_soc[3],arr3_soc[2],arr3_soc[1],arr3_soc[0],-1,arr3_index[1],arr3_index[0], -35,-38};
     for ( i = 0 ; i < qq ; i++ ) txdata9[i] = MAT9[i];  } 

else if (u3==2)

    {int MAT10[]={1,0,10, arr3_v[3], arr3_v[2], arr3_v[1],arr3_v[0],-1,arr3_q[7],arr3_q[6],arr3_q[5],arr3_q[4],arr3_q[3],arr3_q[2],arr3_q[1],arr3_q[0],-1,arr3_soc[3],arr3_soc[2],arr3_soc[1],arr3_soc[0],-1,arr3_index[1],arr3_index[0], -35,-38};
    for ( i = 0 ; i < qq ; i++ ) txdata10[i] = MAT10[i];  }

else if (u3==3)

    {int MAT11[]={1,1,10, arr3_v[3], arr3_v[2], arr3_v[1],arr3_v[0],-1,arr3_q[7],arr3_q[6],arr3_q[5],arr3_q[4],arr3_q[3],arr3_q[2],arr3_q[1],arr3_q[0],-1,arr3_soc[3],arr3_soc[2],arr3_soc[1],arr3_soc[0],-1,arr3_index[1],arr3_index[0], -35,-38};
for ( i = 0 ; i < qq ; i++ ) txdata11[i] = MAT11[i];  }

else if (u3==4)

    {int MAT12[]={1,2,10, arr3_v[3], arr3_v[2], arr3_v[1],arr3_v[0],-1,arr3_q[7],arr3_q[6],arr3_q[5],arr3_q[4],arr3_q[3],arr3_q[2],arr3_q[1],arr3_q[0],-1,arr3_soc[3],arr3_soc[2],arr3_soc[1],arr3_soc[0],-1,arr3_index[1],arr3_index[0], -35,-38};
for ( i = 0 ; i < qq ; i++ ) txdata12[i] = MAT12[i];  }

分配值后,我将数据发送到串口

unsigned char n=26;

uart_multiple (&txdata1, n);
uart_multiple (&txdata2, n);
uart_multiple (&txdata3, n);
uart_multiple (&txdata4, n);
uart_multiple (&txdata5, n);
uart_multiple (&txdata6, n);
uart_multiple (&txdata7, n);
uart_multiple (&txdata8, n);
uart_multiple (&txdata9, n);
uart_multiple (&txdata10, n);
uart_multiple (&txdata11, n);
uart_multiple (&txdata12, n);

编辑:除了txdata12之外我完全收到了所有数据,显示的前16个字符是错误的,我总是把它用于txdata12的最后10个字符,我不知道出了什么问题......

经过一周的努力,我真的无法弄清楚,我希望你能给我一些关于即使采用其他方法也可以工作的提示...... 提前谢谢

1 个答案:

答案 0 :(得分:0)

我在代码中发现有点奇怪的是txtData10,11和12中的第一个参数。在所有其他参数中你有例如

Number.prototype.double = function (){
    return this*2;
}
x=[1,2]
console.log(x.map(double));

其中6映射名称txtdata6但是在10的情况下你写

{int MAT6[]={0,6,10 

看起来不一样,我希望像{int MAT10[]={1,0,10, 这样的东西,但我只是猜测基本上是一种模式。

除此之外,我认为您应该考虑重构一下代码, 在所有语句周围使用{},甚至是一行衬里for-statements,并将它们放在自己的行上,以使代码更具可读性并使用switch语句。使用描述性的变量名称。格式化值以便对它们进行分组。