2013-07-20 88 views
0

我正在嘗試使用getinput函數來返回用戶輸入的字符串值。但是我得到了'getinput'的相互矛盾的類型的錯誤2.之前的'getinput'的隱式聲明就在這裏。有人能向我解釋那些錯誤是什麼?c中出現函數錯誤。試圖返回字符串值。

gets函數應該從用戶讀取兩個不同的句子,並將其存儲在變量userinput1和userinput2中。在你的代碼的頂部getinput()

#include <stdio.h> 
    #include <string.h> 

    char input1[1000] = {0}; 
    char input2[1000] = {0}; 

    int main(){ 
     getinput(); 
     char input[2000]; 
     sprintf(input, "%s %s", input1, input2); 
     printf("%s\n", input); 
     return 0; 
    } 

    const char * getinput() { 
    printf("please enter the something\n"); 
    scanf("%999[^\n]%*c", input1); 
    printf("please enter the next input\n"); 
    scanf("%999[^\n]%*c", input2); 
    return input1, input2; 
    } 

回答

2

此行

return input1, input2; 

使用逗號操作,並返回input2。 由於您聲明瞭input1input2作爲文件範圍變量,因此不需要返回它們 - 它們在main()getinput()的範圍內。刪除回線和使用

void getinput(void); 

int main (void) 
{ ... } 

void getinput (void) 
{ 
    ... 
} 

我也建議看看

scanf("%999[^\n]%*c", input2); 

你或許意味着只是

scanf(" %999[^\n]", input2); 

注意多餘的空白,其跳過所有空格(例如之前的換行符)。

1

添加函數聲明爲

#include <stdio.h> 
#include <string.h> 

const char * getinput(); 

... 

如果編譯器還沒有看到一個函數聲明它假定它返回int,但你的函數實際上返回char *,因此這樣的錯誤/警告。

此外,您不能在C返回多個值。考慮到你的代碼,你不需要返回input1input2,因爲它們是全局變量。

如果您想要返回多個值,您可以返回數組(如果它們具有相似類型)或通過結構返回它們。

+4

絕對不是唯一的問題檢查返回語句 – aaronman

+0

@aaronman,是的,更新了答案,謝謝。 – Rohan

+0

正如Jens的回答所述,值得注意的是'return input1,input2;'實際上是有效的C - 逗號運算符計算每個表達式並返回最後一個操作數的值。它只是a)沒有做OP的期望,b)完全沒有必要,正如指出的那樣。 –

1
#include <stdio.h> 
#include <string.h> 

char input1[1000] = {0}; 
char input2[1000] = {0}; 
const char * getinput(); 

int main(){ 
getinput(); 
char input[2000]; 
sprintf(input, "%s %s", input1, input2); 
printf("%s\n", input); 
return 0; 
} 

const char * getinput() { 
printf("please enter the something\n"); 
scanf("%999[^\n]%*c", input1); 
printf("please enter the next input\n"); 
scanf("%999[^\n]%*c", input2); 
} 
+2

這是錯誤的。不從非void函數返回任何東西。 ''const char * getinput();'不是原型,它是一個棄用的舊式(K&R)函數聲明。 – Jens