2011-02-12 16 views
3

我希望readline接受int。什么是完成这个最好的方法?我没有问题接受字符串输入,像这样:Readline在控制台中接受int in C

char *usrname; // define user input 

/* accept input */ 
printf("Enter new name:"); 
usrname = readline(NULL); 

我也明白,有一个int将需要一些错误接受输入之前的检查。

回答

6

Eduardo Costa's answer工作,但它泄漏内存。这是更好地定义一个函数来照顾这对你:

int readint(char *p, char **e) 
{ 
    char *c = readline(p); 
    int i = strtol(c, e, 0); 
    if(e) 
     { 
     size_t o = (size_t)(*e - c), 
       l = strlen(*e) + 1; 
     *e = malloc(l); 
     // error checking omitted 
     memcpy(*e, c + o, l); 
     } 
    free(c); 
    return i; 
} 

这个版本甚至会保留线路上的任何多余的东西,所以你可以,如果你需要用到它。当然,如果你需要用额外的东西做很多事情,你可能会更好,只需阅读该行并自己解析,而不是像这样的功能。

-4

你有没有试过类似的东西?

int i = atoi(readline(NULL)); 
+4

-1这使得'readline'返回的字符串'释放'是不可能的,这是一个非常严重的问题。 – 2011-02-12 21:41:46

+1

如果该值不适合'int',那么`atoi`具有未定义的行为。使用`strtol`会更受欢迎。 – 2011-02-12 21:44:38