2017-02-15 25 views
1

我的程序有两个独立的功能,它排除非首要位置,然后保留这个输出。除了我遇到的问题是,目前它不是我想要的,因为第一个函数排除了非黄金地点,然后第二个函数使用了原始输入,并且保留而不是函数的输出一。我是C新手,所以请放轻松点。如何在C中将一个函数的输出传递给另一个函数?

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

void reverse(char[], long, long); 
int main() 
{ 
    char str[50]; 
    int i, j, k, cnt = 0; 
    long size; 

    printf("Enter: "); 
    scanf("%s", str); 

    size = strlen(str); 
    reverse(str, 0, size - 1); 
    printf(str); 
    return 0; 
} 

void reverse(char str[], long index, long size) 
{ 
    char temp; 
    temp = str[index]; 
    str[index] = str[size - index]; 
    str[size - index] = temp; 
    if (index == size/2) 
    { 
     return; 
    } 
    reverse(str, index + 1, size); 
} 

对不起,如此模糊,从1234567的输入端的输出样本将是2357然后此输出反转为7532

+1

请问你能解释一点点你的问题吗?在函数'main'中,你根本不会改变'str',所以在'reverse'中你使用原来的'str'。 – Marievi

+2

您可以给出一个示例输入和您期望的输出吗?我真的不明白你想要完成什么。 –

+1

*'不包括非首要头寸,然后保留输出* * - 您的非主要头寸*是指什么?可能是一个错字:* re ** v ** er ** s ** e输出*? – Wolf

回答

5

这里是你的代码做什么(因为它是现在写的):

  1. 输入从控制台字符串
  2. 打印出每一个字符是一个“黄金位置”(2,3, 5,7,等等)而不修改字符串
  3. 反转原始的,未经修改
  4. 打印出来的反向串

这听起来对我说,你要找的是以下内容:
当你“从字符串排除字符”创建新的字符串你从输入字符串是在非字符填充 - 优先位置。比使用该修改后的字符串作为reverse()函数的参数。

我毫不怀疑,如果你明白上面的段落,你将没有问题修复你的代码。

这里是实现你所需要的步骤:

  1. 输入字符串转换成str(如你现在做的)
  2. 引入新的字符串str2大小相同50为原始字符串
  3. 在循环从str每个字符复制到str2不在一个“黄金位置”
  4. 电话reverse()为它提供str2作为参数,而不是(当前)str
+1

这正是我在做的事情,但是如何通过输入来挣扎。我知道这可能太傻了,我也做错了。 –

+2

@Ijustwanttolearn。因为他说你做过滤器并打印它,但你永远不会将它保存到数组中。只需创建一个新数组并将过滤后的字符送入它,然后将NEW数组传递给“reverse”。 –

+0

良好的分析。但说实话:你看到它背后有什么感觉? – Wolf

相关问题