2012-09-22 87 views
0

我已經閱讀了其他的文章,「從整數W/O投影使得指針」錯誤,但我很困惑,究竟是什麼它的意思是。是不是說如果我不投射(投射意思是說gets ((int) input)),函數gets默認使int變量input成爲一個指針?警告:傳遞參數1的'gets'使得整數指針沒有投射[缺省情況下啓用]

int directions() 
{ 
    int input; 

    printf("Type '1', '2', etc to see a problem or type '(add an 'all' option to see a  list of all the problems)\n"); 
    gets(input); 

    switch (input) { 
     case 1: euler1(); 
     case 2: euler2(); 
    } 

    return input; 
} 

int main() 
{ 
    printf("Welcome to Project Euler's Problems in C!\n"); 
    directions(); 

    return 0; 
} 
+0

這應該不會編譯...除非有int到char *的隱式轉換。 – Borgleader

+4

不要使用'gets()',即使在演示代碼中也是如此。只使用'fgets()',即使它將手指戴到骨骼上,輸入兩個額外的參數。 –

+2

即使手冊頁說**從不使用gets()。** –

回答

1

的第一個參數gets()char*,一個指向緩衝區的指針。它不返回int。如果你看一下documentation on gets,你會看到它是如何正確使用的。

一旦你讀入字符串,你需要使用atoi從ASCII轉換爲整數。

請注意,您最好使用諸如fscanf(stdin, "%d", &input);之類的東西來掃描輸入流以獲取所需的輸入。

+5

沒有正確/安全的方式來使用'gets()';它甚至不是當前標準C庫的一部分(很長很長一段時間!)。它從C2011被丟棄。你繼續提及使用其他的東西,但是... IMNSHO,你不能亂用'gets()'足夠的努力。然而,提問者也需要教會如何釣魚;找出'gets()'的接口很重要。 –

-1

gets()沒有得到int。使用atoi()進行轉換。

char *s; 
s = gets(buff) 
input = atoi(s); 
+0

'buff'不在任何地方聲明;和's'是多餘的 –

相關問題