【发布时间】:2018-11-04 10:13:06
【问题描述】:
此代码应首先告诉用户输入要检查的三角形的数量。如果用户没有输入一个整数,那么程序会告诉用户再次输入一个整数,直到他这样做为止。
然后用户必须为三元组输入一个浮点数。 继续在这里工作正常。但是对于第二个三元组,如果用户没有输入整数(例如他输入 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操作的定义。我建议您更改问题的标题,以反映您在代码中遇到的问题。 -
在不相关的说明中,请放弃对字符串使用这些宏。而是直接打印字符串。
-
在发布之前修复您的代码。有很多空行。在发布之前,假设未来的雇主会查看您的代码。
-
@Someprogrammerdude 在我们大学,我们必须为字符串使用定义
标签: c loops error-handling while-loop continue