Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 c中变量的作用域#_C# 4.0 - Fatal编程技术网

C# 4.0 c中变量的作用域#

C# 4.0 c中变量的作用域#,c#-4.0,C# 4.0,我面临一个与所用变量范围相关的问题 代码: 在这段代码中,在最后一个if(upflag==1)条件下,我的VS2010在upflag下面显示一条红线,并表示 使用未分配的局部变量“upflag” 为什么会这样?C++中完全正确,但是在多个嵌套循环/条件下,分配给括号内变量的值不会反映在它们之外,即使变量在循环之前声明。 请帮助考虑如果count==0会发生什么情况。将不执行for循环的主体,并且不会向upflag分配任何值。这就是为什么编译器说“使用未分配的局部变量”——这意味着变量可能没有分配

我面临一个与所用变量范围相关的问题

代码:

在这段代码中,在最后一个if(upflag==1)条件下,我的VS2010在upflag下面显示一条红线,并表示 使用未分配的局部变量“upflag”

为什么会这样?C++中完全正确,但是在多个嵌套循环/条件下,分配给括号内变量的值不会反映在它们之外,即使变量在循环之前声明。
请帮助考虑如果
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();
        }