如何让用户输入正确
How to make user input correctly
问题是关于您可以在下面看到的那部分代码。我有两个变量 leftLimit
和 rightLimit
。它们的值应严格从 -1 到 1(不包括在内)。好的,我解决了这个问题。当输入 >= 比 |1|程序将询问直到输入所需的值。但它仅在输入具有数字值时才有效。当输入为 a
或 /
等时,程序结束但没有任何效果。我该如何解决?如何防止我的程序进行非数字输入?
#include <stdio.h>
#include <math.h>
int main() {
double leftLimit, rightLimit;
printf("Enter the left limit: ");
scanf ("%lf", &leftLimit);
while (fabs(leftLimit)>=1) {
printf("\nYou typed a wrong limit, try again: ");
scanf("%lf", &leftLimit);
}
printf("\nEnter the right limit: ");
scanf("%lf", &rightLimit);
while (fabs(rightLimit)>=1) {
printf("\nYou typed a wrong limit, try again: ");
scanf("%lf", &rightLimit);
}
scanf()
是 ill-suited 用于用户输入。
首选 fgets()
可能后跟 sscanf()
或 strtol()
或 strtod()
double leftLimit;
char buffer[1000];
for (;;) {
printf("Enter left limit: ");
fflush(stdout);
if (!fgets(buffer, sizeof buffer, stdin)) exit(EXIT_FAILURE);
char *err;
leftLimit = strtod(buffer, &err);
if (*err != '\n') continue;
if (fabs(leftLimit) >= 1) continue;
break; // all ok
}
printf("Accepted left limit of %f.\n", leftLimit);
问题是关于您可以在下面看到的那部分代码。我有两个变量 leftLimit
和 rightLimit
。它们的值应严格从 -1 到 1(不包括在内)。好的,我解决了这个问题。当输入 >= 比 |1|程序将询问直到输入所需的值。但它仅在输入具有数字值时才有效。当输入为 a
或 /
等时,程序结束但没有任何效果。我该如何解决?如何防止我的程序进行非数字输入?
#include <stdio.h>
#include <math.h>
int main() {
double leftLimit, rightLimit;
printf("Enter the left limit: ");
scanf ("%lf", &leftLimit);
while (fabs(leftLimit)>=1) {
printf("\nYou typed a wrong limit, try again: ");
scanf("%lf", &leftLimit);
}
printf("\nEnter the right limit: ");
scanf("%lf", &rightLimit);
while (fabs(rightLimit)>=1) {
printf("\nYou typed a wrong limit, try again: ");
scanf("%lf", &rightLimit);
}
scanf()
是 ill-suited 用于用户输入。
首选 fgets()
可能后跟 sscanf()
或 strtol()
或 strtod()
double leftLimit;
char buffer[1000];
for (;;) {
printf("Enter left limit: ");
fflush(stdout);
if (!fgets(buffer, sizeof buffer, stdin)) exit(EXIT_FAILURE);
char *err;
leftLimit = strtod(buffer, &err);
if (*err != '\n') continue;
if (fabs(leftLimit) >= 1) continue;
break; // all ok
}
printf("Accepted left limit of %f.\n", leftLimit);