我正在从https://www.learn-c.org/学习C编程语言。在“条件”部分中,我在下面编写了一个练习-
在本练习中,您必须在if
函数语句内构造一个guessNumber
语句,以检查数字猜测是否等于555。在这种情况下,该函数必须使用{ {1}}条消息printf()
。如果猜测值小于555,则必须使用Correct. You guessed it!
printf()
打印输出;如果猜测值大于555,则必须使用Your guess is too low.
printf()
问题是我认为输出不正确。我只想清除疑问。下面是代码
Your guess is too high.
输出为
Your guess is too low. Your guess is too high. Correct. You guessed it!
答案 0 :(得分:2)
程序正在演示from __future__ import absolute_import, unicode_literals
from quickstart.models import Receipt
from celery import shared_task
@shared_task
def set_something(receipt_id):
print("doing something")
receipt = Receipt.objects.get(id=receipt_id)
receipt.text= "some text"
receipt.save()
return True
函数如何验证猜测。但这实际上并没有提示人类用户做出任何猜测。
为此,您可以编写以下代码:
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
-如果用户猜到则返回true(1),否则返回false(0)。>
这最终有点奇怪。将程序有效地划分为功能是很重要的,但是有点艺术。在这里,int
函数检查答案并打印结果,但不进行提示。而且我们可以说最终程序没有正确划分各部分,因为我们不得不引入一个额外的数据路径(我添加的guessNumber
返回)才能使程序的两部分与彼此并协调他们的活动。
(当然,在真实程序中,要猜测的数字也不会像这样硬连接到int
内部。它可能会作为参数或其他形式传递给我们。)
但是,除了那些古怪的地方,这里还有另外一个有用的教训,那就是,通常,当您编写了一个新函数并且使用该函数的主程序尚未准备就绪时,编写一个完全不同的有用小型guessNumber
程序只是为了测试您的新功能。
事实上,当您编写了一个新函数时,无论如何,编写一个小型main
程序只是为了测试您的新函数通常是一个好主意。您小的,简单的main
程序可以确保您的函数可以在所有测试用例上正常运行,并且现在您知道。如果您对新功能所做的第一件事是将其集成到将要使用它的大型,复杂的主程序中,则会出现两个问题:
也许大型的,复杂的主程序并没有完全按照您的要求进行操作-也许在一种情况下不会恰好调用它,也许这种情况存在您的错误还不知道。
如果大型,复杂的主程序调用了您的函数,而出了一些错误,则表明存在错误,这是您的函数还是大型,复杂的主程序中的错误?有时候很难知道。
所以这就是为什么小型,简单的main
程序(其技术术语为“ test harness”)只是为了测试功能通常是一个好主意。