使用程序的输出作为同一程序中的输入

时间:2018-09-25 09:48:35

标签: c algorithm file permutation

我正在编写一个程序,以生成给定数字序列的所有可能的排列,然后从该排列中生成所有可能的二叉树,因此,我认为有一个程序可以生成排列并将结果存储到文件中,然后编写更多代码以逐行读取(包含所有置换)并从中生成二进制树,因此,现在我编写了半个程序,生成置换并将结果存储在文件中。

#include <stdio.h>

//function to print the array
void printarray(int arr[], int size)
{
        FILE *fp;
    int i,j;
        fp=fopen("result.txt","w");
    for(i=0; i<size; i++)
    {
          //  printf("%d\t",arr[i]);
          fprintf(fp,"%d\t",arr[i]);
    }
    printf("\n");
    fclose(fp);
}

//function to swap the variables
void swap(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

//permutation function
void permutation(int *arr, int start, int end)
{
    if(start==end)
    {
        printarray(arr, end+1);
        return;
    }
    int i;
    for(i=start;i<=end;i++)
    {
        //swapping numbers
        swap((arr+i), (arr+start));
        //fixing one first digit
        //and calling permutation on
        //the rest of the digits
        permutation(arr, start+1, end);
        swap((arr+i), (arr+start));
    }
}

int main()
{
   //taking input to the array
    int size;
    printf("Enter the size of array\n");
    scanf("%d",&size);
    int i;
    int arr[size];
    for(i=0;i<size;i++)
        scanf("%d",&arr[i]);
    //calling permutation function
    permutation(arr, 0, size-1);
    return 0;
}

但是此程序中的问题在于该程序仅存储一个排列,而没有将其他排列存储在result.txt文件中,我该如何继续存储结果。程序也不会结束空白光标闪烁,这会给错误的无限while循环印象。 我必须按Ctrl + c结束程序,才能摆脱这种情况?

3 个答案:

答案 0 :(得分:0)

您的fopen("result.txt","w");每次打开时都会截断文件。 请改用fopen("result.txt","a");

答案 1 :(得分:0)

代码有多个问题,您确实必须尝试逐行逐一检查笔记本以查看正在发生的事情(或者必须使用调试器)。要回答您的具体问题:

  1. 每次对printarray的调用都以写入模式w打开-这将清除文件。要追加,请使用a(您可能还需要在其中插入新行printf->fprintf)。
  2. 循环不是无限的。尝试以小尺寸运行(例如最多5个)。然后尝试根据数组大小计算程序的复杂度。您要执行的任务不小,在每次迭代中,您也要执行文件操作。

答案 2 :(得分:0)

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define N 10

void print(int *num, int n)
{
        FILE *fp;
        fp=fopen("result.txt","a");
    int i;
    for ( i = 0 ; i < n ; i++)
//        printf("%d ", num[i]);
          fprintf(fp,"%d ",num[i]);
    fprintf(fp,"\n");
   fclose(fp);
}
int main()
{
    int num[N];
    int *ptr;
    int temp;
    int i, n, j;
    printf("\nHow many number you want to enter: ");
        scanf("%d", &n);
    printf("\nEnter a list of numbers to see all combinations:\n");
    for (i = 0 ; i < n; i++)
        scanf("%d", &num[i]);
    for (j = 1; j <= n; j++) {
        for (i = 0; i < n-1; i++) {
            temp = num[i];
            num[i] = num[i+1];
            num[i+1] = temp;
            print(num, n);
        }
    }
    return 0;
}