int main() {
printf("Enter a number [between 1.0 - 10.0]: ");
double lf;
for (;;) {
printf("number = ");
scanf("%lf", &lf);
if (lf < 1) {
printf("Error: number must be >= 1.000000\n");
}
else if (lf > 10) {
printf("Error: number must be <= 10.000000\n");
}
else {
break;
}
}
这是我到目前为止的代码,它可以正常工作。我唯一需要帮助的是 - 在用户输入文本时添加错误检查,而不是数字。我尝试过多种方法,但我只是学习这种语言,所以我很难将其应用到现有代码中。我已经尝试过isdigit和isalpha命令,但这并不起作用。
编辑:到目前为止,我已经更改了代码以使其更加有效。虽然还有另一个问题。新代码:int main() {
printf("\nEnter a number [between 1.0 - 10.0]: ");
double lf;
for (;;) {
printf("number = ");
scanf("%lf", &lf);
if (scanf("%lf", &lf) != 1) {
printf("Error: enter a number\n");
int ch;
while ((ch = getchar()) != EOF && ch != '\n');
continue;
}
else if (lf < 1) {
printf("Error: number must be >= 1.000000\n");
}
else if (lf > 10) {
printf("Error: number must be <= 10.000000\n");
}
else {
break;
}
}
printf("Enter another number: ");
问题是,当我输入文字时,它会要求我再次输入该号码。因此,如果我输入&#39; 3&#39;,扫描仪会向下移动到下一行,没有提示要求输入数字。但是如果我在没有提示的情况下输入另一个数字并按下回车键,那么它会转到我输入另一个数字的最后一行代码。我怎样才能使它只通过输入一次进入打印语句?
答案 0 :(得分:1)
你可以使用字符串库,更具体地说是一个名为atof()的函数,它将一个数字作为一个字符作为参数。如果提供的字符不是数字,它将返回0。所以读取数字作为字符然后你可以退出程序,如果你得到0.所以它看起来像这样:
scanf("%s", temp);
int lf = atof(temp);
if( !lf) {
printf("No strings allowed");
exit(1);
}
答案 1 :(得分:1)
int main() {
printf("\nEnter a number [between 1.0 - 10.0]: ");
double lf;
for (;;) {
printf("number = ");
if (scanf("%lf", &lf) != 1) { //THIS IS THE FIX HERE
printf("Error: enter a number\n");
int ch;
while ((ch = getchar()) != EOF && ch != '\n');
continue;
}
else if (lf < 1) {
printf("Error: number must be >= 1.000000\n");
}
else if (lf > 10) {
printf("Error: number must be <= 10.000000\n");
}
else {
break;
}
}
printf("Enter another number: ");
答案 2 :(得分:0)
这使用getline(3),它将malloc和/或重新分配缓冲区来保存输入行。这样可以省去担心截断或空终止的问题。
#define _XOPEN_SOURCE 700 // for getline(3)
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *ln = NULL;
size_t lnsz = 0;
double lf;
printf("Enter a number [between 1.0 - 10.0]: number = ");
while (getline(&ln, &lnsz, stdin) > 0) {
char c = 0;
if (sscanf(ln, "%lf%c", &lf, &c) != 2 || c != '\n')
printf("Error: must be a number\n");
else if (lf < 1)
printf("Error: number must be >= 1.000000\n");
else if (lf > 10)
printf("Error: number must be <= 10.000000\n");
else
break;
printf("number = ");
}
printf("lf = %f\n", lf);
free(ln);
return 0;
}