如何解决未初始化的局部变量?

时间:2017-09-11 22:41:50

标签: c

#include <stdio.h>

int main() {
    int x;  int counter;
    while (scanf_s("%d", &x) != 0)
    {
        puts("Enter the a signed number : ");
        if (x % 2 == 0) { counter=counter++; }
    }
    printf(" %d pair numbers", counter);
}

我得到了

  

使用未初始化的局部变量计数器。

程序应该继续询问数字,直到它变为零并告诉我们给出的对数量。

2 个答案:

答案 0 :(得分:0)

在尝试递增计数器之前,需要将计数器初始化为0。 counter = counter++;也是多余的(并且未定义!)。只需使用counter++

即可

答案 1 :(得分:-1)

您遇到的问题是由于您使用变量counter而未初始化它。这正是编译器告诉你的。

当您第一次尝试执行counter=counter++;时,counter没有明确的值。您可能会认为int counter;会使用0进行初始化,但这在C中是错误的。

下一个问题是行counter=counter++;本身。如果您想增加counter,请使用counter++。根据您使用的编译,counter=counter++的使用应至少给您一个警告。在我使用Apple LLVM版本8.1.0(clang-802.0.42)的计算机上,我得到了

  

警告:对计数器&#39;进行多次无序修改[-Wunsequenced]

然后你尝试循环直到你阅读0。但是scanf()(使用此而不是Microsoft特定的scanf_s()会返回它从stdin读取的内容,但会分配输入项目的数量。如果匹配失败,它将返回0

所以这是做什么的:

  1. 初始化counter
  2. counter=counter++替换为counter++
  3. 使用另一个循环中断条件而不是scanf()
  4. 的返回值

    一种方法可能如下:

    #include <stdio.h>
    
    int main() {
        int x=0;
        int counter=0;
    
        do{
            printf("Enter the a signed number: ");
            scanf("%d", &x);
            if (!(x % 2)){
                counter++;
            }
        } while(x);
    
        printf(" %d pair numbers\n", counter);
    }