2014-10-17 43 views
0

那么有程序正在执行它的功能,但我试图检查,如果用户输入的值是数字(不包含字母或符号)。所以基本上我使用if和isdigit或'/ 0'条件。程序编译正确,但输入少于3种类型(偶数...)时出现错误。它有什么问题?只有当我需要的是当数字是0-999时跳过循环并且当它不是时重新提问,或者如果它不是数字。检查字符是否包含数字并将其转换为INT

char x[5]; 
bool isgood; 
int tab[20][2],i=0,a; 
do 
{ 
    isgood = TRUE; 
    printf("Write a where 0<a<1000\n"); 
    scanf("%4s", x); 
    for (int j = 0; j < 4; j++) 
    { 
     if (isdigit(x[j])==0 || x[j]!='/0') isgood = FALSE; 
    } 
    a = atoi(x); 
    if (a<1000 && isgood == TRUE) break; 
} while (1); 
+2

其实,终止零或者是普通的'0'或''\ 0''。你的编译器应该警告你。 – usr2564301 2014-10-17 22:35:52

+0

@WhozCraig实际上,如果isgood变得不合情理,这并不重要,因为循环只能重复4次。 – Dnoren 2014-10-17 23:10:25

+0

@Dnoren啊。精神牙线101.它肯定是星期五。 – WhozCraig 2014-10-17 23:13:09

回答

1

错误:

  • 你的布尔逻辑
  • 你的空字符
  • 调用atoiisgoodFALSE

更改此:

isdigit(x[j])==0 || x[j]!='/0' 

要这样:

isdigit(x[j])==0 && x[j]!='\0' 

这:

a = atoi(x); 
if (a<1000 && isgood == TRUE) break; 

要这样:

if (isgood == TRUE) 
{ 
    a = atoi(x); 
    if (0<a && a<1000) 
     break; 
} 

这里是做整个事情的一个更简单的方法:

int x; 
char c; 
do 
{ 
    printf("Write a where 0<a<1000\n"); 
    if (scanf("%d",&x) == 0) 
     scanf("%c",&c); 
    else if (0<x && x<1000) 
     break; 
} 
while (1); 
+0

简单的方法是不是真的工作。当我输入与数字不同的东西时,程序就会变得疯狂。要么纠正你所说的话没有帮助,但我认为他们应该是你说的方式。 – Dnoren 2014-10-17 23:05:44

+0

@Dnoren:是的,我明白你的意思了。请参阅答案底部的修订代码。 – 2014-10-17 23:11:02

+0

现在它几乎可以工作,但仍然存在一些问题。 1)当我输入无效值(如'aaaa')时,它显示消息“Write a where 0 Dnoren 2014-10-17 23:17:46