2011-02-12 44 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