C# 4.0 c中变量的作用域#
我面临一个与所用变量范围相关的问题 代码: 在这段代码中,在最后一个if(upflag==1)条件下,我的VS2010在upflag下面显示一条红线,并表示 使用未分配的局部变量“upflag” 为什么会这样?C++中完全正确,但是在多个嵌套循环/条件下,分配给括号内变量的值不会反映在它们之外,即使变量在循环之前声明。C# 4.0 c中变量的作用域#,c#-4.0,C# 4.0,我面临一个与所用变量范围相关的问题 代码: 在这段代码中,在最后一个if(upflag==1)条件下,我的VS2010在upflag下面显示一条红线,并表示 使用未分配的局部变量“upflag” 为什么会这样?C++中完全正确,但是在多个嵌套循环/条件下,分配给括号内变量的值不会反映在它们之外,即使变量在循环之前声明。 请帮助考虑如果count==0会发生什么情况。将不执行for循环的主体,并且不会向upflag分配任何值。这就是为什么编译器说“使用未分配的局部变量”——这意味着变量可能没有分配
请帮助考虑如果
count==0会发生什么情况。将不执行for
循环的主体,并且不会向upflag
分配任何值。这就是为什么编译器说“使用未分配的局部变量”——这意味着变量可能没有分配
它在c语言中非常好++
不,不是。编译器可能没有对此抱怨,但它仍然是未定义的行为
我的VS2010在upflag下面显示了一条红线,表示使用了未分配的局部变量“upflag”
那正是你的问题。它是未分配的,您试图比较它的值
首先将其初始化为一个值。使用:
int row_no=0//或任何其他值,如-1
int upflag=0//或任何其他值,如-1
int downlag=0//或任何其他值,如-1
因为需要首先初始化这些值。upflag已声明,但未分配值,并且不能保证在循环中初始化(例如,如果计数为0,则循环不会命中upflag分配)
声明upflag=0时,请尝试将其设置为默认值。原因是C编译器不允许使用未初始化的变量。如果编译器检测到使用了可能尚未初始化的变量,则会生成编译错误
在C++中,它显示了相同的警告消息,但并不阻止用户编译。
如果您在声明中初始化count,那么它将起作用
int row_no, upflag, downflag;
for (int i = count; i > 0; i--)
{
asd = ds1.Tables[out_table].Rows[i][59].ToString();
int com1 = string.Compare(asd, "Upstream");
int com2 = string.Compare(asd, "Downstream");
if (com1 == 0 || com2 == 0)
{
row_no = i;
if (com1 == 0)
upflag = 1;
else
downflag = 1;
break;
}
}
if (upflag == 1)//
{
string val1 = ds1.Tables[out_table].Rows[count][59].ToString();
string val2 = ds1.Tables[out_table].Rows[(count - 1)][59].ToString();
}