我想使用一个函数来询问用户是否有余额。如果余额低于0,则提示用户输入大于0的值。这是我到目前为止所做的代码:
#include <stdio.h>
#include <string.h>
float getPositiveValue();
int main()
{
float begbal;
begbal = getPositiveValue();
getPositiveValue();
printf("balance: %f\n", begbal);
return 0;
}
float getPositiveValue()
{
float money;
printf("Please enter the beginning balance: \n");
scanf("%f", &money);
if(money < 0)
{
printf("Enter a balance amount above 0:");
scanf("%f", &money);
}else{
}
}
我收到错误“警告:控制到达非空函数的结尾”。我知道我需要结束else语句,但是如果输入的值超过0,则不确定要放在那里的内容。此外,当程序运行时,它会要求用户两次输入起始余额。看起来这应该是一个简单的解决方案,由于某种原因我无法理解函数heh。
任何帮助都非常感激。
修改后的工作代码(谢谢):
#include <stdio.h>
#include <string.h>
float getPositiveValue();
int main()
{
float begbal;
begbal = getPositiveValue();
printf("balance: %f\n", begbal);
return 0;
}
float getPositiveValue()
{
float money;
printf("Please enter the beginning balance: \n");
scanf("%f", &money);
while(money < 0)
{
printf("Enter a balance amount above 0:");
scanf("%f", &money);
}
return money;
}
答案 0 :(得分:1)
money
。您正在主函数中调用您的函数两次。
begbal = getPositiveValue();
getPositiveValue();
删除最后一句话
答案 1 :(得分:1)
getPositiveValue()应该返回一个值(float)。您可以在结束前添加return money;
。
如果用户特别密集并且未输入正数,该怎么办?你想给他们一次机会吗?如果没有,您可能想要使用while (money < 0.0)
循环。
答案 2 :(得分:0)
“此外,当程序运行时,它会要求用户两次输入 由于某种原因开始平衡。“
因为您调用了函数getPositiveValue()在您的代码中使用了两次
并且你的函数需要返回浮点值,在这种情况下是“money”。
答案 3 :(得分:0)
用户可能会坚持输入错误的内容,因此您需要一个循环来迭代,直到他们做对了。此外,您需要从此函数返回一个值。
float getPositiveValue()
{
float money;
fputs("Please enter the beginning balance: ", stdout);
for (;;) {
scanf("%f\n", &money);
if (money >= 0)
break;
fputs("Balance must be nonnegative.\n"
"Please enter the beginning balance: ", stdout);
}
return money;
}
但这只是冰山一角。 scanf
should never be used,不应使用浮点数来跟踪资金。您应该真正在这里做的是阅读一行文字getline
(或fgets
,如果getline
不可用),并使用{{解析它3}}和自定义逻辑,大概为[$] dddd [.cc](方括号表示可选文本),变为uint64_t
值,缩放为美分。
答案 4 :(得分:0)
由于用户可能输入无效范围(负数)或非数字文本,因此需要在下次提示之前使用违规输入。
float getPositiveValue() {
float money = 0.0;
printf("Enter a balance amount above 0:");
while ((scanf("%f", &money) != 1) || (money < 0)) {
int ch;
while (((ch = fgetc(stdin)) != '\n') && (c != EOF));
if (c == EOF) break;
printf("Enter a balance amount above 0:");
}
return money;
}