我正在通过函数验证用户输入。
这是我的代码:
#include <stdio.h>
void get_income(double *pschool, double *pincome);
double get_double(void);
main()
{
get_income(&pschool, pincome);
}
void get_income(double *pschool, double *pincome) {
int tuition, supplies;
printf("Enter tuition:");
scanf("%d", &tuition);
printf("Enter supplies:")
scanf("%d", &supplies);
*pSchool = tuition + supplies;
return;
}
double get_double(void) {
// validation code should go in here
}
我需要验证用户提供的学费
和用品
的值,以确保它们都是0或更大且不为空。不应接受负值或除数字以外的任何内容。
验证代码应该在get\u double函数中,我似乎不知道如何验证驻留在单独函数中的内容。请寻求指导。
该代码存在许多问题,包括:
“读取一行并用sscanf()解析它”可能比“让scanf()读取数据”做得更好;更容易处理错误报告。
这些观察结果导致:
#include <stdio.h>
int get_tuition_and_supplies(double *ptuition, double *psupplies);
int get_double(double *pvalue);
int main(void)
{
double tuition, supplies;
if (get_tuition_and_supplies(&tuition, &supplies) == 0)
printf("Tuition: %.2f; supplies %.2f\n", tuition, supplies);
return(0);
}
int get_tuition_and_supplies(double *ptuition, double *psupplies)
{
int rc = -1; // Failure
printf("Enter tuition: ");
if (get_double(ptuition) == 0)
{
printf("Enter supplies: ");
if (get_double(psupplies) == 0)
rc = 0;
}
return rc;
}
int get_double(double *pvalue)
{
char buffer[4096];
int rc = -1;
if (fgets(buffer, sizeof(buffer), stdin) == 0)
fprintf(stderr, "EOF (or error) reading data\n");
else if (sscanf(buffer, "%lf", pvalue) != 1)
fprintf(stderr, "Did not find a number in input (%.32s)\n", buffer);
/* Could check for no extracharacters (blanks allowed) up to newline */
else if (*pvalue < 0.0)
fprintf(stderr, "Value (%g) may not be negative\n", *pvalue);
else
rc = 0;
return rc;
}
“将返回代码(rc
)设置为失败,直到证明成功”的习惯用法是处理验证的一种有效技术。最好在get_double()
函数中包含提示,这样它的签名就变成了:
int get_double(const char *prompt, double *pvalue);
这允许您将get_tuition_and_supplies()
中的代码简化为:
int rc = -1; // Failure
if (get_double("Enter tuition: ", ptuition) == 0 &&
get_double("Enter supplies: ", psupplies) == 0)
rc = 0;
return rc;
这可以灵活地扩展到处理多个值,而不仅仅是两个值。
对我来说,我真的不喜欢使用scanf,因为这样。以下是我将如何解决您的问题:
1000
(整数类型)的数字,那么我只会分配6个字符。最后两个是'\n'
和'\0'
。'\n'
以检测溢出。fegts()
函数接收输入。'\n'
的最后一个元素之前的一个是否已更改来检查溢出。如果是这样,我报告溢出错误,否则继续执行。atof()
或atoi()
函数分别转换为双精度或整数值。我想知道我的方法是否包含任何类型的bug,但据我所知,它工作得很好。
在我看来,get\u double()的目的似乎是处理用户输入。这就是我要做的:
#include <stdio.h>
int get_double(double *in)
{
scanf("%d", in);
if (*in < 0) {
printf("error message");
return 1;
}
return 0;
}
void get_income(double ptuition, double psupplies, double *pschool)
{
*pschool = ptuition + psupplies;
}
int main(void)
{
double ptuition, psupplies, pschool;
printf("Enter tuition: ");
if (get_double(&ptuition)) {
return 1;
}
printf("\nEnter supplies: ");
if (get_double(&psupplies)) {
return 1;
}
get_income(ptuition, psupplies, &pschool);
printf("Total school cost: %f", pschool);
return 0;
}
问题内容: 哦,我的话我是个傻瓜。 调用函数时,我只是省略了第二个和第三个参数。像个傻瓜。因为那就是我。原来愚蠢的问题如下: 这似乎是它必须做一个很平常的事,但是我无法找到相关的教程,我太无知了约,并弄明白自己。 我的文件中有一个C函数。 (您可能会猜到,我最初的参数为double 而不是void ,但无法弄清楚在Python方面该怎么做。我当然很想将其改回来,但我并不挑剔只要有效。) 我用它制作
有人能帮我完成输入验证功能吗。我正在验证整数输入。问题是当用户输入多个整数my cin时。fail()对每个整数运行,导致我的错误显示多次。让我告诉你我的意思 这是我的代码: 因此,如果用户要输入“jjj”;我的“请只输入整数”显示三次。我只想让它显示一次。我不知道怎么做。有什么想法吗?
问题内容: 在Python中,该模块可用于在一系列值上并行运行函数。例如,这将生成f的前100000个评估的列表。 当f接受多个输入而只有一个变量变化时,是否可以做类似的事情?例如,如何并行处理此: 问题答案: 有几种方法可以做到这一点。在问题给出的示例中,您可以定义一个包装函数 然后将此包装传递给。一种更通用的方法是使用一个包装器,该包装器使用一个元组参数并将该元组解包为多个参数 或使用等效的l
问题内容: 我是这个C ++世界的新手,正在尝试为数字密码编写输入验证功能。这是我到目前为止所得到的: 对于不正确的值,它工作得很好,但在有效输入时不会中断循环。知道我在这里缺少什么吗?干杯!! James Kanze脚本的ErroR: 新代码: 使用 和 验证作为字符串 感谢所有人(尤其是James Kanze)的帮助。这件事在这里很有效。 那里还有进一步改进的空间吗?干杯!! 问题答案: 这看
问题内容: 我正在使用ASP.net C#创建一个Web应用程序。我有一个预订表格,我需要使用存储过程将数据插入表中。该表有几列,其中第二列是计算列。设置存储过程以插入数据并在插入后从第二列中获取值。以下是存储过程的代码: 我想单击一下按钮即可插入数据:我能够找出以下代码…。 请帮助…。我想捕获返回的RcptNo,以后打算调用另一个ASPX页并使用查询字符串传递值。 谢谢 问题答案: 使用简单的S
出于我无法控制的原因,我必须在我的C代码中实现这个函数: 调用此函数时,编译器是否忽略它,或者是否仍然进行调用?例如: 两行代码的执行时间是相同的,还是第一行需要更长的时间?