2014-10-31 50 views
0

这里是我的代码,并且即时通讯知道为什么我的char *bdin未被regonized为数字,当它在函数isdigit()中被选中时?这里是我改进的getline和我的检查函数,对于检查函数不要看看参数,我只是创建函数来实验。我想当我把bdin放在功能isdigit(),它给他们地址到第一个元素[0]。我尝试用(char *) (bdin)[0]也做的就是第一要素,因为对方是'\n''\0',但它仍然不干活......Isdigit do not regonize Char * like digirt

int getline(char *ulaz) 
{ 
    int i , c; 
    for (i = 0; (c = getchar())!= EOF && c!='\n';i++, ulaz++) 
      *ulaz = c; 

    if (c =='\n') 
    *ulaz++ = '\n'; 
     *ulaz = '\0'; 
    return i; 
} 

void checker(void) 
{ 
    int duzina; 
    char *bdin; 
    duzina = getline(&bdin); 
if (isdigit(bdin)) 
    printf("It is digit!!\n"); 
    else 
     printf("no!\n"); 
} 
+0

使用调试器... – 2014-10-31 19:34:48

+0

无论这个代码有什么其他可能的错误,'isdigit(bdin)'应该是'isdigit(* bdin)' – 2014-10-31 19:37:01

+0

首先,将char * bdin改为'char bdin' 。有趣的是编译器没有提醒你。 – 2014-11-08 20:26:37

回答

1

该计划不确定的行为,因为你没有分配内存,这将是由bdin指向以及你将要写入输入的位置。 此外,该程序还有其他使用不正确数据类型的错误。 FPR例如表达

&bdin 

的类型是char **而函数的相应参数有类型char *

同样在此表达式没有意义。

ISDIGIT(bdin)

类型功能ISDIGIT的参数是int,而你通过char *你可以写例如

if (isdigit(*bdin)) 

if (isdigit(bdin[0])) 

,但在任何情况下,该功能将只检查一个字符是否是数字。

+0

谢谢你,你能告诉我如何编写代码以获取来自funcition getline的代码的快速提示,并检查该数字是否? – lotoflaugh 2014-10-31 19:42:59

+0

@lotoflaugh是否要检查字符串的第一个字符是数字还是字符串只包含数字? – 2014-10-31 19:45:40

+0

对不起,我没有提供有关此信息,我想检查该字符串是否只包含数字。我想检查该行是否是数字,如果它是“1”或“23241”,则无关紧要。但是如果你能告诉我使用函数getline进行处理......这将是我锻炼的最佳解决方案。 – lotoflaugh 2014-10-31 19:52:20