![](/img/trans.png)
[英]in this example how do i print the sequence only once? (recursive function)
[英]How to print new sequence in main function?
我有一个程序,它将根据几个条件形成一个新的数字序列(序列+片段)。
我需要在主函数中打印在名为Concat
的函数中形成的新序列,但还需要Concat
返回 1,因此在主函数中知道要打印的序列是有效的。
这是我的代码:
#define BUFFER 50
int Concat(char sequence[], char piece[]){
int sequenceValid = 1;
int sizeSequence = strlen(sequence);
if(sequence[sizeSequence-1] == piece[0]){
sequence = strcat(sequence,piece);
} else if(sequence[0] == piece[1]){
sequence = strcat(piece,sequence);
} else {
sequenceValid = 0;
}
return sequenceValid;
}
int main()
{
char piece[BUFFER], sequence[BUFFER];
scanf("%s", sequence);
scanf("%s", piece);
if (Concat(sequence, piece)){
printf("%s", sequence); // at this stage the new sequence formed above by the method `strcat` should be printed ( sequence + piece) not just the sequence, however only the sequence is printed.
}
else{
printf("piece %s cannot be added %s.",piece, sequence);
}
}
根据我上面的注释,如果Concat
函数返回 true(1) 它只打印用户给出的序列,而不是我想要的序列 + 片段。
测试示例:输入:
166335 21
所需输出:21166335
当前输出(错误):166335
如何在主函数中打印新序列?
当谈到 C 中的函数参数时,您需要记住三件事:
首先是像char sequence[]
这样的参数实际上被视为char *sequence
,即它是一个指针。
第二件事是所有参数实际上都是函数的局部变量,它们的生命周期在函数结束时结束。
第三件事是所有参数都通过value传递,这意味着调用位置的值被复制到函数的本地参数变量中。
所有放在一起,一旦函数返回,您对sequence
所做的所有分配都将丢失。
简单的解决方案:在末尾返回sequence
(或无效序列上的空指针)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.