2017-02-15 29 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

相關問題