gpt4 book ai didi

c - 我认为c语言中的代码不正确

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

我正在从https://www.learn-c.org/学习C语言。在“条件”部分,我在下面写了一个练习 -

在本练习中,您必须构建 if guessNumber 内的声明检查数字猜测是否等于 555 的函数语句。如果是这种情况,该函数必须使用 printf() 打印出来消息Correct. You guessed it! 。如果猜测值小于 555,则该函数必须使用 printf() 打印出来Your guess is too low. ,如果猜测值大于 555,则该函数必须使用 printf() 打印出来Your guess is too high.

问题是我认为输出不正确。我只是想澄清疑惑。下面是代码

#include <stdio.h>

int main() {
guessNumber(500);
guessNumber(600);
guessNumber(555);
}

void guessNumber(int guess) {
if (guess < 555) {
printf("Your guess is too low.\n");
} else if (guess > 555) {
printf("Your guess is too high.\n");
} else {
printf("Correct. You guessed it!\n");
}
}

输出为

Your guess is too low.  Your guess is too high.  Correct. You guessed it!

最佳答案

该程序正在演示 guessNumber 函数如何验证猜测。但它实际上并没有提示人类用户做出任何猜测。

为此,您可以这样写:

#include <stdio.h>

int guessNumber(int guess) {

if (guess < 555) {
printf("Your guess is too low.\n");
return 0;
} else if (guess > 555) {
printf("Your guess is too high.\n");
return 0;
} else {
printf("Correct. You guessed it!\n");
return 1;
}
}

int main() {
int guess;
while (1) {
printf("Enter your guess: ");
fflush(stdout);
if (scanf("%d", &guess) != 1)
break;
if (guessNumber(guess))
break;
printf("Try again.\n");
}
return 0;
}

这会提示用户输入一个数字,调用 guessNumber 来验证它,如果猜测不正确,则重复该过程。为了让 main 中的循环知道是否继续,我将 guessNumber 更改为返回 int -- true (1)(如果用户猜对了) ,否则为假 (0)。

这最终成为一个奇怪的程序。将程序有效地划分为函数很重要,但在某种程度上也是一门艺术。此处,guessNumber 函数检查答案并打印结果,但不进行提示。我们可以看出,最终的程序没有完全正确地划分各个部分,因为我们必须引入一个额外的小数据路径 - 我添加的 int 返回 - 让两个部分程序相互通信并协调它们的事件。

(当然,在真实的程序中,要猜测的数字不会像那样硬连线在 guessNumber 内部。它可能会作为参数或其他内容传入。)

但是抛开这些争论不谈,这里还潜伏着另一个有用的教训,那就是,通常,当您编写了一个新函数,而使用它的主程序尚未准备好时,编写一个完全不同的函数是很有用的,小的main程序只是为了测试你的新功能。

事实上,当您编写了一个新函数时,无论如何,编写一个小的main程序来测试您的新函数通常是一个好主意。您的小而简单的main程序可以确保您的函数在其所有测试用例上都能正常工作,现在您知道。如果您对新函数所做的第一件事是将其与将使用它的大而复杂的主程序集成,则会出现两个问题:

  1. 也许大而复杂的主程序并没有完全让你的函数完成所有的步骤——也许它没有碰巧在某种情况下调用它,也许这种情况有一个错误,你还不知道。

  2. 如果大而复杂的主程序调用你的函数并且出现问题,表明存在错误,那么错误是在你的函数中还是在大而复杂的主程序中?有时很难知道。

这就是为什么小而简单的 main 程序(技术术语是“test harness ”) - 只是为了测试您的功能通常是一个好主意。

关于c - 我认为c语言中的代码不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57347307/

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