gpt4 book ai didi

c - 对用户输入进行错误处理,直到输入正确

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

这段代码首先应该告诉用户输入要检查的三角形的数量。如果用户没有输入整数,则程序会告诉用户再次输入整数,直到输入为止。

然后用户必须输入三元组的 float 。继续在这里工作得很好。但对于第二个三元组,如果用户没有输入整数(例如输入 2x),它将返回到 while 循环的顶部,即请输入三元组的第一个数字。如何编辑我的代码,使其不会转到 while 循环的顶部,而是告诉用户再次输入三元组的第二个数字?

#include <stdio.h>
#include <stdlib.h>
#define request "Please enter the number of triangles to check: "
#define triplet1 "Please enter the first number of the triplet: "
#define triplet2 "Please enter the second number of the triplet: "
#define Error "[ERR] Invalid number of triangles.\n "
#define Error2 "[ERR] Invalid number for the triplet.\n"
#define UCHAR_MAX 20

int main ()
{

int triangles = 0;
char *end;

for (;;)
{
printf ("%s", request);
char buffer[30];
fgets (buffer, sizeof (buffer), stdin);
triangles = strtol (buffer, &end, 10);
if (*end != '\n' || triangles < 1 || triangles > UCHAR_MAX)
{
printf ("%s", Error);

continue;
}
break;
}

float triplet[3] = { 0.0, 0.0, 0.0 };
int i = 0;
while (i < triangles)
{
float tmp = 0.0;
printf ("%s\n", triplet1);
char buffer[30];
fgets (buffer, sizeof (buffer), stdin);
tmp = strtol (buffer, &end, 10);
if (*end != '\n' || tmp < 1)
{
printf ("%s", Error2);
continue;

}
triplet[0] = tmp;
tmp = 0.0;
printf ("%s\n", triplet2);

fgets (buffer, sizeof (buffer), stdin);
tmp = strtol (buffer, &end, 10);
if (*end != '\n' || tmp < 1)
{
printf ("%s", Error2);
continue; // goes back to the top of the while loop

}

triplet[1] = tmp;


i++;

}

return 0;
}

最佳答案

这是 continue 语句的预期行为。您需要为此实现内部循环。

如果您想在用户输入正确的值之前接受输入,请尝试以下操作:我没有 C 编译器,所以无法测试,但希望它应该可以工作。如果您发现任何问题,请告诉我。

while (i < triangles)
{
float tmp = 0.0;
char buffer[30];
whiel(true){
printf ("%s\n", triplet1);
fgets (buffer, sizeof (buffer), stdin);
tmp = strtol (buffer, &end, 10);
if (*end != '\n' || tmp < 1)
{
printf ("%s", Error2);
continue;
}
triplet[0] = tmp;
break;
}

tmp = 0.0;
while(true){
printf ("%s\n", triplet2);
fgets (buffer, sizeof (buffer), stdin);
tmp = strtol (buffer, &end, 10);
if (*end != '\n' || tmp < 1)
{
printf ("%s", Error2);
continue;
}
triplet[1] = tmp;
i++;
break;
}
}

关于c - 对用户输入进行错误处理,直到输入正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139690/

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