2013-07-20 49 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