在我的程式中,我想使用數字。如果用戶輸入的不是數字,我想回圈程式。也就是說,如果輸入“f”、“12f”、“120941s”、“123a13”,它應該會顯示錯誤并要求您重新輸入。我設定了一個條件,因為它也很重要。但是我還需要無條件地獲取另一個數字,只要它不是符號即可。
我放了一個回圈,但是在第一個輸入字符的情況下會報錯,但是如果我輸入“22ff”,它會在一個變數中將22寫給我,并將ff寫給下一個變數(我需要獲取幾個帶數字的變數)并產生錯誤。因此,我仍在嘗試清理標準輸入,以便沒有流發送到下一個變數
我怎樣才能做到這一點?我最好將其作為字串檢查嗎?回圈對我來說也很重要,因為我想繼續作業,而不是結束程式。我會很高興每一個建議!謝謝!
do {
bool valid;
printf("Enter number x(float) ");
while(!scanf(" %f", &x)) {
printf("x must be number!\nPlease, enter number! ");
fflush(stdin); }
if (x < 0) printf("\nThe number a must be positive. Try again\n");
else valid = 0
} while (valid)
uj5u.com熱心網友回復:
這是一個將在一定范圍內驗證輸入并且沒有尾隨垃圾的函式。它使用fgets并且很容易轉儲錯誤的輸入并重復。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
double getdouble(double minval, double maxval)
{
char buffer[64]; // generous
char *endptr; // pointer to the next character
double inval; // result
while(1) {
printf("Enter a double value between %f and %f: ", minval, maxval);
if(fgets(buffer, sizeof buffer, stdin) != NULL) {
inval = strtod(buffer, &endptr);
// check next character, and the range of the value
if(isspace(*endptr) && inval >= minval && inval <= maxval) {
break; // success
}
}
}
return inval;
}
int main(void)
{
printf("%f\n", getdouble(1.0, 2.0));
}
節目環節:
Enter a double value between 1.000000 and 2.000000: 1.5t
Enter a double value between 1.000000 and 2.000000: 2.5
Enter a double value between 1.000000 and 2.000000: abc
Enter a double value between 1.000000 and 2.000000: 1.5
1.500000
請注意,我double沒有使用float. 永遠不要float在沒有明確原因的情況下使用doubleC 中的自然浮點型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/528593.html
標籤:C循环输入做时
上一篇:Gradle:在build.gradle中創建具有值和訪問權限的hashmap
下一篇:for回圈中的JS陣列
