gpt4 book ai didi

c - 程序输出值而不初始引用变量(牛和牛)

转载 作者:行者123 更新时间:2023-11-30 20:14:11 25 4
gpt4 key购买 nike

事情是这样的,我正在用C编写一个公牛和奶牛游戏,并有一个有趣的观察..这是我的程序在没有初始引用的情况下输出值....首先看一下整个代码

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>

int main(){
int i,j,bulls,cows;
//int bulls = 0;
//int cows = 0;
char guess[4];
char chosenword[4] = "onea";
puts("Enter Your best guess <4 letter word>");
gets(guess);
for(i=0;i<4;i++){
if(guess[i] == chosenword[i]){
bulls++;
}
else {
for(j=0;j<4;j++){
if(chosenword[i]==guess[j]){
cows++;
}
}
}
}
printf("Bulls: %d And Cows: %d",bulls,cows);
return 0;
}

正如你所看到的,我没有将变量 bulls 和 cows 初始化为 0,但我的程序仍然输出某个值或其他值,例如:

正如您所看到的,这里有三个试验......虽然公牛的值(value)发生变化,但奶牛的值(value)保持不变。谁能解释一下其中的逻辑吗?

最佳答案

因为,除了初始化之外,您的变量还包含一些垃圾值。您无法预测该值是多少。

在您的代码中,bullscows 是 [auto] 中的局部变量。因此,编译器不会初始化它们,除非您在代码中明确这样做。

与使用静态或使其全局化相反。

如果没有初始化,使用bulls++;cows++会创建一个先读后写场景,这很可能会导致未定义的行为。始终初始化变量。

要避免此问题:请取消代码中初始化部分的注释。 :-)

忠告:请不要使用gets()。使用fgets()。它更安全。

下一步,

char guess[4];
char chosenword[4] = "onea";

更改为

char guess[5];                //to hold the terminating null character also
char chosenword[ ] = "onea"; //while initializing, you don't need to specify size explicitly.
<小时/>

编辑:

在您的情况下,cow 会产生恒定输出,因为对于的输入,if条件永远不会失败。

关于c - 程序输出值而不初始引用变量(牛和牛),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27296294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com