2016-06-12 84 views
-1

我得到解决的问题如下: - 写一个名为“is_digit”的函数接受一个字符作为输入,并返回一个整数值如果参数输入是0到9之间的ASCII数字,则为1。否则,该函数必须返回值0.C发出函数返回1当用户输入为0-9时ASCII

- 在主函数中,调用is_digit,并根据用户输入传入参数。然后主函数必须输出调用is_digit的结果。

这是我迄今为止

#include <stdio.h> 

     char is_digit(int x) 
     { 
      if (x > '48' && x < '57') //The ascII range between 0-9 (i think...) 
      { 
       return 1; 
      } 
      else      
//Whatever the user input is it always runs the else 
      { 
       return 0;    
//Is this what the question means by "function must return a value of 0" 
      } 
     } 

     int main() 
     { 
      char x; 
      printf("input: "); 
      scanf("%c", &x); 
      is_digit(x); 
     } 

为什么我的程序没有返回1,如果我的用户输入是0-9?

更新版本与考虑到的意见:

#include <stdio.h> 

char is_digit(char x) 
{ 
    if (x >= 48 && x <= 57) 
    { 
     printf("1"); 
     return 1; 
    } 
    else 
    { 
     printf("0"); 
     return 0; 
    } 
} 

int main() 
{ 
    char x; 
    printf("input: "); 
    scanf("%c", &x); 
    is_digit(x); 
} 
+0

测试'if(x>'48'&& x <'57')'不正确。删除单引号,并使用'> ='而不是'>'(也可用'<='而不是'<') – Aziz

+0

你正在比较一个int与一个字符(各种:两个元素的字符;不确定这是多么有效)。请使用和*读取*您的编译器警告。 – Evert

+0

哎呀,修正了我的if语句,非常感谢!但我的功能仍然没有返回1 ..... –

回答

0

你的错误是

if (x > '48' && x < '57') //The ascII range between 0-9 (i think...) 

应该

if (x > 47 && x < 58) //The ascII range between 0-9 (i think...) 

改正的代码如下所示

#include <stdio.h> 

      int is_digit(char x) 
      { 
       if (x > 47 && x < 58) //The ascII range between 0-9 (i think...) 
       { 
        return 1; 
       } 
       else      
    //Whatever the user input is it always runs the else 
       { 
        return 0;    
    //Is this what the question means by "function must return a value of 0" 
       } 
      } 

      int main() 
      { 
       char x; 
       printf("input: "); 
       scanf("%c", &x); 
       printf("result is: %d",is_digit(x)); 
       return 0; 

      } 

编程中的返回语句是计算机做什么的证明。在c和C++中,在main中返回0表示程序正确结束,不会崩溃,但不一定代码是错误或正确的。

+0

感叹。只需写出明显的'if(x> ='0'&& x <='9')',那么您不必知道或关心ASCII值是什么,并且不会冒险让他们错误。 –

+0

该任务是打印is_digit的结果。这个程序不这样做。返回'is_digit(x)'是假的。 –

0

你的返回类型为char, 试试这个:

int is_digit(int x) 
+0

编写一个名为is_digit的函数,它接受一个“字符作为输入”,并返回一个整数值1. 作为输入要求的字符是什么有点让我在这个问题上跳动。如果它是整数输入,它将是一块蛋糕。 –

+0

@ F.Horn为什么? 'scanf(“%c”,&x)'将一个char读入'x' - 一块蛋糕。测试它可以用int is_digit(int x){return x> ='0'&& x <='9'; '' - 另一块蛋糕。 –

+0

“写一个名为”is_digit“的函数接受一个字符作为输入”是问题要求的一部分 –

0

总之:因为你不告诉它来。最后一行应该是:

return is_digit(x);

没有return,从is_digit()结果只是简单地扔掉......

+0

非常感谢!我多愚蠢。这解决了这个问题。 它返回和int,但我的函数总是运行else语句?关于为什么if语句没有运行的任何线索? –

+0

询问计算机对x有什么价值。而不是'printf(“0”);'use'printf(“%d”,x);'它会打印出x的值而不是简单的'0' - 然后你可以找出x是什么。它应该在这个范围内,但也许你首先键入一个空格?或者是?或者是其他东西。如果输出是32或更少,那么它是一个空格或键。这就是'scanf(“%c”)的问题' - 它扫描下一个字符,不管它是什么 –

1

试试这个: 另外要注意使用“无符号的字符X”你主要这意味着正值0-255

#include <stdio.h> 

int is_digit(int x) 
{ 
    if (x >= 48 && x <= 57) 
     { 
      return 1; 
     } 
    return 0; 
} 

最好是改变你的方法返回一个int而不是char。

取下单引号,因为你是比较ASCII字符(INT)

的数值也用“< =”和“> =”的迹象,因为这个问题说的包容性。 '<'和'>'是排他性的。

你不需要别的块,因为如果它是一个数字,答案会立即返回。

“//这是什么问题意味着”功能必须返回值为0“?

是的,就是这个意思。

+0

int is_digit(int x) { return x> ='0'&& x <='9'; } –

1

你可以做一个直接的比较:

int is_digit(char x) 
{ 
    int result; 
    if (x >= '0' && x <= '9') 
    { 
     result = 1; 
    } 
    else 
    { 
     result = 0; 
    } 
    return result; 
} 
+1

是的,另一个回答针对整数值的测试是无能的。但是......简单地说'return x> ='0'&& x <='9;'做的是正确的事情,可能是导师所期待的。 –