我正在编写一个程序,以生成给定数字序列的所有可能的排列,然后从该排列中生成所有可能的二叉树,因此,我认为有一个程序可以生成排列并将结果存储到文件中,然后编写更多代码以逐行读取(包含所有置换)并从中生成二进制树,因此,现在我编写了半个程序,生成置换并将结果存储在文件中。
#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结束程序,才能摆脱这种情况?
答案 0 :(得分:0)
您的fopen("result.txt","w");
每次打开时都会截断文件。
请改用fopen("result.txt","a");
答案 1 :(得分:0)
代码有多个问题,您确实必须尝试逐行逐一检查笔记本以查看正在发生的事情(或者必须使用调试器)。要回答您的具体问题:
printarray
的调用都以写入模式w
打开-这将清除文件。要追加,请使用a
(您可能还需要在其中插入新行printf->fprintf
)。答案 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;
}