我在WINCC脚本编辑器里编写了如下一段C 程序,想把数组E[0][0]、E[0][1]、E[0][2]分别赋给a,b,c。然后再界面上显示出来。可是为什么只显示E[0][0]的值,其余两个的不显示呢?为什么FOR循环没有效果?求高手解答
#include "apdefap.h"
void xx_1()
{
int n;
float a,b,c;
char str1[100]="NewTag_";
char str[100];
int row,line;
float E[1][3];
row=1;
for(line=1;line<=3;line++)
{
n=row*10+line;
sprintf(str,"%d",n);
strcat(str1,str); //Return-Type: char*
E[row-1][line-1]=GetTagFloat(str1); //Return-Type: float
}
SetTagFloat("a",E[0][0]); //Return-Type: BOOL
SetTagFloat("b",E[0][1]); //Return-Type: BOOL
SetTagFloat("c",E[0][2]); //Return-Type: BOOL
}
问题补充:
我其实是想做一个测试,看看可不可以用循环的办法 一次性把变量表里“NewTag_11”、“NewTag_12”、“NewTag_13”这三个变量的值赋给数组 E[0][2]的三个对应值。
因为我需要把变量表里105个类似于“NewTag_11”变量的值赋给数组 E[7][15],如果可以循环赋值,就能大大减轻我的工作量。这个是模糊控制的隶属函数表,因为要求在线修改隶属度的值,所以只能是给每个隶属度都存一个变量。在模糊控制规则表的计算中要用到E[7][15]这个矩阵。
最佳答案
问题应该出在这句代码上:
strcat(str1,str); //Return-Type: char*
FOR循环第一次执行时,STR1的值是NewTag_11,是有效的变量名,所以能取到正确的值。
FOR循环第二次执行时,STR1的值不是NewTag_12,而是NewTag_1112,不是有效的变量名,所以不能取到正确的值。
至于第三次循环执行时,得到的是NewTag_111213,而不是NewTag_13。
把这两段代码:
sprintf(str,"%d",n);
strcat(str1,str); //Return-Type: char*
改为:
sprintf(str1,"NewTag_%d",n);
应该就可以解决问题。
提问者对于答案的评价:
我测试过了,果然是这样。
真是太感谢你了,让我学到了新的东西。谢谢谢谢!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc268094.html