Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中获取函数错误。正在尝试返回字符串值。_C - Fatal编程技术网

在c中获取函数错误。正在尝试返回字符串值。

在c中获取函数错误。正在尝试返回字符串值。,c,C,我试图使用getinput函数返回用户输入的字符串值。但我得到了1的错误。“getinput”2的类型冲突。“getinput”的上一个隐式声明就在这里。有人能给我解释一下这些错误是什么吗 gets函数应该从用户处读取两个不同的句子,并将其存储在变量userinput1和userinput2中 #include <stdio.h> #include <string.h> char input1[1000] = {0}; char inpu

我试图使用getinput函数返回用户输入的字符串值。但我得到了1的错误。“getinput”2的类型冲突。“getinput”的上一个隐式声明就在这里。有人能给我解释一下这些错误是什么吗

gets函数应该从用户处读取两个不同的句子,并将其存储在变量userinput1和userinput2中

    #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; 
    }
#包括
#包括
字符输入1[1000]={0};
字符输入2[1000]={0};
int main(){
getinput();
字符输入[2000];
sprintf(输入,“%s%s”、输入1、输入2);
printf(“%s\n”,输入);
返回0;
}
const char*getinput(){
printf(“请输入某物\n”);
scanf(“%999[^\n]%*c”,输入1);
printf(“请输入下一个输入\n”);
scanf(“%999[^\n]%*c”,输入2);
返回input1、input2;
}

在代码顶部添加
getinput()
的函数声明,如下所示

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

const char * getinput();

...
#包括
#包括
const char*getinput();
...
若编译器并没有看到函数声明,它会假定它返回
int
,但您的函数实际上返回
char*
,所以会出现这样的错误/警告

此外,您不能在
C
中返回多个值。考虑到您的代码,您不需要返回
input1
input2
,因为它们是全局变量


如果要返回多个值,可以返回数组(如果它们的类型相似)或通过结构返回它们。

在代码顶部添加函数声明
getinput()
,如下所示:

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

const char * getinput();

...
#包括
#包括
const char*getinput();
...
若编译器并没有看到函数声明,它会假定它返回
int
,但您的函数实际上返回
char*
,所以会出现这样的错误/警告

此外,您不能在
C
中返回多个值。考虑到您的代码,您不需要返回
input1
input2
,因为它们是全局变量

如果要返回多个值,可以返回数组(如果它们是类似类型的),也可以通过结构返回它们。

此行

return input1, input2; 
使用逗号运算符并返回
input2
。 由于已将
input1
input2
声明为文件作用域变量,因此无需返回它们--它们在
main()
getinput()中都在作用域中。删除返回行并使用

void getinput(void);

int main (void)
{  ... }

void getinput (void)
{
   ...
}
我还建议您看看

scanf("%999[^\n]%*c", input2);
你也许是说

scanf(" %999[^\n]", input2);
请注意,额外的空白会跳过所有空白(如前一换行)。

此行

return input1, input2; 
使用逗号运算符并返回
input2
。 由于已将
input1
input2
声明为文件作用域变量,因此无需返回它们--它们在
main()
getinput()中都在作用域中。删除返回行并使用

void getinput(void);

int main (void)
{  ... }

void getinput (void)
{
   ...
}
我还建议您看看

scanf("%999[^\n]%*c", input2);
你也许是说

scanf(" %999[^\n]", input2);
请注意,多余的空格会跳过所有空白(例如,前一个换行符)。

\include
#包括
字符输入1[1000]={0};
字符输入2[1000]={0};
const char*getinput();
int main(){
getinput();
字符输入[2000];
sprintf(输入,“%s%s”、输入1、输入2);
printf(“%s\n”,输入);
返回0;
}
const char*getinput(){
printf(“请输入某物\n”);
scanf(“%999[^\n]%*c”,输入1);
printf(“请输入下一个输入\n”);
scanf(“%999[^\n]%*c”,输入2);
}
#包括
#包括
字符输入1[1000]={0};
字符输入2[1000]={0};
const char*getinput();
int main(){
getinput();
字符输入[2000];
sprintf(输入,“%s%s”、输入1、输入2);
printf(“%s\n”,输入);
返回0;
}
const char*getinput(){
printf(“请输入某物\n”);
scanf(“%999[^\n]%*c”,输入1);
printf(“请输入下一个输入\n”);
scanf(“%999[^\n]%*c”,输入2);
}

肯定不是唯一的问题检查return语句值得注意的是,正如Jens回答中提到的,
return input1,input2
实际上是有效的C-逗号运算符计算每个表达式,并返回最后一个操作数的值。它只是a)没有达到OP的预期,b)完全没有必要,正如所指出的那样。@Mattpanteaude,是的,这就是我在回答时试图解释的,返回多个值并不像OP预期的那样有效。@PEARR你为什么接受这个答案?它完全没有解决你的问题。在那之后,你的程序仍然有同样的错误,不会做你想做的事情。@PEARR;再次阅读@Jens的答案。肯定不是唯一的问题检查返回语句。值得注意的是,正如Jens答案中提到的,
returninput1,input2
实际上是有效的C-逗号运算符计算每个表达式,并返回最后一个操作数的值。它只是a)没有达到OP的预期,b)完全没有必要,正如所指出的那样。@Mattpanteaude,是的,这就是我在回答时试图解释的,返回多个值并不像OP预期的那样有效。@PEARR你为什么接受这个答案?它完全没有解决你的问题。在那之后,你的程序仍然有同样的错误,不会做你想做的事情。@PEARR;再次阅读@Jens的答案。这是错误的。不从非void函数返回任何内容。和
const char*getinput()
不是原型,它是不推荐使用的旧式(K&R)函数声明。这是错误的。不从非void函数返回任何内容。和
const char*getinput()
不是原型,它是一个不推荐使用的旧式(K&R)函数声明。