2014-09-29 25 views
1

我只需要弄清楚如何给出错误是用户输入任何不是数字的东西。我已经设置了无法通过或不能通过的代码的值。如何仅接受C中的数字并阻止用户输入字母和特殊字符?

我只需要只接受数字:如果输入一个字母或任何类型的特殊字符我想程序只是取消自己。我怎样才能做到这一点?

#include <stdio.h> 
#include <math.h> 

int main(void) { 
    float base, height; 
    float area; 

    printf("Please enter the value of base of the triangle: \n"); 
    scanf ("%f", &base); 
    if(base<.5) 
     printf("Invalid Input\n"); 

    while (base<.5) 
     return 0; 

    if(base>100) 
     printf("Invalid Input\n"); 

    while(base>100) 
     return 0; 

    printf("Please enter the value of height of the triangle:\n"); 
    scanf("%f", &height); 

    if(height<1) 
     printf("Invalid Input\n"); 

    while(height<1) 
     return 0; 

    if(height>75) 
     printf("Invalid Input\n"); 

    while (height>75) 
     return 0; 

    area = base * height/2; 

    printf("The area of the triangle for base: %f and height: %f is %f \n", base, 
      height , area); 

    return 0; 
} 

回答

2

你不能阻止进入,无论他或她想要的用户,但你可以使用的scanf返回值来决定是否有效的值已输入,并提示用户正确输入:

float base; 
do { 
    printf("Please enter the value of base of the triangle: \n"); 
} while (scanf ("%f", &base) != 1 || base < .5 || base > 100); 

这个循环将继续下去,直到所有的三个条件:

  • scanf返回只有一个项目,
  • scanf提供的值大于或等于0.5,和
  • scanf提供的值小于或等于100
+0

由于OP想要“给出错误是(如果)用户输入任何不是数字的”,这里的弱点在这里。这不会完全消耗“123abc”之类的非digt文本,但将“abc”保留在“stdin”中并且不会出现错误。建议'fgets()'然后'sscanf()/ strtof'。 – chux 2014-09-29 19:26:30

0

scanf返回的已匹配和填充的变量数值成功。 只是做:

int result = scanf ("%f", &base); 
if(result != 1) 
{ 
    ...//handle error 
} 
0

我认为,你可以通过阅读文字输入的字符,然后检查它是否是一个数字,如果不告诉你你的错误消息。

#include <stdio.h> 
#include <math.h> 


int main(void) 
{ 
    float base, height; 
    float area; 



printf("Please enter the value of base of the triangle: \n"); 
char c='\n'; 
char success=0; 
base=0; 
char dot=0; 
do{ 
scanf ("%c", &c); 
if((c>=48)&&(c<=57)){ 
    if(dot==0) 
    base=base*10+(c-48); 
    else{ 
    base+=(c-48)/dot; 
    dot*=10; 
    } 
} 
else 
if((c=='.')&&(dot==0)) 
    dot=10; 
else 
    if(c!='\n') 
    success=1; 

}while((c!='\n')&&(succes==0)); 


if(success!=0) return -1; //error we break out 
if(base<.5) 
printf("Invalid Input\n"); 
while (base<.5) 
return 0; 


if(base>100) 
printf("Invalid Input\n"); 
while(base>100) 
    return 0; 


printf("Please enter the value of height of the triangle:\n"); 
c='\n'; 
success=0; 
height=0; 
dot=0; 
do{ 
scanf ("%c", &c); 
if((c>=48)&&(c<=57)){ 
    if(dot==0) 
    height=height*10+(c-48); 
    else{ 
    height+=(c-48)/dot; 
    dot*=10; 
    } 
} 
else 
if((c=='.')&&(dot==0))//check if is the first time the user insert a dot 
    dot=10; 
else 
    if(c!='\n') 
    success=1; 

}while((c!='\n')&&(succes==0)); 


if(success!=0) return -1; //error we break out 


if(height<1) 
printf("Invalid Input\n"); 

while(height<1) 
return 0; 

if(height>75) 
printf("Invalid Input\n"); 

while (height>75) 
return 0; 

area = base * height/2; 

printf("The area of the triangle for base: %f and height: %f is %f \n", base, 
height , area); 

return 0; 


} 
相关问题