首页 > 解决方案 > 为什么我得到“使用未初始化的局部变量'猜测'”,即使我正在做与老师正在做的完全相同的事情?

问题描述

我正在做一些业余练习并遇到了这个错误:

#include <stdio.h>

int main(){

int answer = 5;
int guess;

while (guess != answer) {
    printf("enter a number: ");
    scanf_s("%d", &guess);
}
printf("you guessed the correct number which was 5!");
    
return 0;
}

这是非常简单的循环练习,但由于某种原因,即使我正在做与该视频while中的老师告诉我做的完全相同的事情,它也无法正常工作。

我通过给出int guess一个值来修复它,比如int guess = 0.

但是为什么该代码在视频中有效,但在我的编译器中无效?

标签: c

解决方案


这不是错误,而是编译器发出的警告。它告诉你,你正在访问一个未定义的值,因为你没有初始化你的变量。

未明确给出值的局部变量称为“未初始化”,因为它假定“已分配内存块中的任何内容”的值,这通常会导致垃圾值,而绝对不是您的值想。

第一个问题在循环中。根据“guess”中的垃圾值,它可能决定根本不运行您的循环(因为“guess”可能只是偶然保持值“5”)。

另一个问题是您对 scanf 的使用。如果输入的内容不符合您的要求(即不是数字),guess将保持不变。有关详细信息,请参阅有关 scanf 的文档。

作为一个小轶事,我想说:我曾经有一个bool(C++,应该只为真或假)变量在某些情况下未初始化。

然后,在路上,它被检查了if (!variable),在 else 条件下它显示为else if (variable == true)。它没有进入任何一个分支,因为正如调试器所揭示的那样,我的变量的值既不是真也不是假。它是 42。这就是未初始化变量所具有的危险。你永远不会知道你得到了什么。


推荐阅读