我想查看用户的输入,如果他的输入是浮点数或整数,那么接受它并对其进行一些数学运算,否则如果他的输入是字符,符号,大量数字或除了数字之外的任何其他内容他要输入另一个输入。 提示我使用数据类型float for" p.burst_time"。 但每当我输入任何输入时,程序认为它是一个错误的输入,因为检查器变为= 1,即使输入是正确的&我不知道为什么。 并提前感谢。
for(;;){
int i,checker,point=0;
char c[25];
c[strlen(c)-1] = '\0';
printf("\nEnter The Process's Burst Time > 0 : ");
fgets(c, 21, stdin); //Max input is 20.
fflush(stdin);
for(i=0;i<strlen(c);i++) //strlen(c) is the size. Max is 20.
{
if(c[i]=='.')
point++;
else if(!isdigit(c[i])){
checker=1; //Checker is 1 when input isn't a digit.
break;
}
}
printf("checker = %d\npoint = %d\n",checker,point);
if(checker==1||point>1){
printf("\a\aPlease enter a positive number only greater than zero.\n"); //Input has space, symbols, letters. Anything but digits.
continue;
}
else
{
p.burst_time = atof(c); //Converting to float only if input is nothing but digits.
if(p.burst_time<=0)
continue;
else
break;
}
}
答案 0 :(得分:1)
一些问题:
\n
:您应该忽略它以及初始和终端空格(' '
,\r
,\t
,\f
,至少2先)c[strlen(c)-1] = '\0';
没有任何意义:你试图使用null来终止数组,但是strlen只给出了第一个null的位置,这个位置在一个单元化数组上是unifined行为(感谢WhozCraig注意到它):你可以c[0] = '\0';
或c[sizeof(c) - 1] = '\0';
,但这里又没用了我没有尝试过它,所以我不知道是否还有其他人......
答案 1 :(得分:1)
您应该使用strtod
或相关函数strtof
:
#include<stdio.h>
#include <stdlib.h>
int main() {
double d;
char c[25];
char * converted;
for(;;){
printf("\nEnter The Process's Burst Time > 0 : ");
fgets(c, 21, stdin); //Max input is 20.
d = strtod(c,&converted);
if (converted == c){
printf("Conversion unsuccesful");
}
else {
printf("Converted value: %f",d);
}
}
}
从手册页引用:
double strtod(const char *nptr, char **endptr);
如果endptr不是NULL,则指向最后一个字符的指针 转换中使用的字符存储在引用的位置 by endptr。
如果未执行转换,则返回零并且返回nptr的值 存储在endptr。
引用的位置
另外,我会使用getline
而不是gets
来避免输入流太大时出现问题。