如何在C中将输出从一个函数传递到另一个函数?

I j*_*rn. 1 c function c-strings inverse

我的程序有两个独立的函数,它排除非素位,然后从中保留输出.除了我遇到的问题之外,目前我的工作方式并不正常,因为第一个函数排除非素数位置,然后第二个函数使用原始输入并保留而不是函数的输出一.我是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);
}
Run Code Online (Sandbox Code Playgroud)

遗憾的是如此模糊,从一个输入输出的样本1234567将是2357那么这个输出反转为7532.

YeP*_*IcK 5

这是你的代码所做的(正如现在所写):

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

听起来你正在寻找的是:
当你"从字符串中排除字符"时,你创建一个新的字符串,用输入字符串中非主要位置的字符填充.比将修改后的字符串用作reverse()函数的参数.

我毫不怀疑,如果您理解上面的段落,那么修复代码没有问题.

以下是实现您所需要的步骤:

  1. 输入字符串str(正如您目前所做)
  2. 引入一个与原始字符串大小相同的 字符串str250
  3. 在循环复制的每一个字符从strstr2,是不是在一个"黄金位置"
  4. 调用reverse()提供它str2作为参数,而不是(当前)str

  • @Ijustwanttolearn.正如他所说,你做过滤器并打印它,但你永远不会将它保存到数组中.只需创建一个新数组并将过滤后的字符输入其中,然后将NEW数组传递给`reverse`. (2认同)
  • OP的用户名是"我只是想学习",所以这显然是一项学习任务.为什么不帮忙呢?;-) (2认同)