- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我有这段代码:
#include <stdio.h>
#include <stdlib.h>
struct tree
{
char data;
struct tree *left;
struct tree *right;
};
int findNode(char temp[], int x, int y, char val);
struct tree *insert(int data);
struct tree *binarytree(char inorder[], char preorder[], int x, int y)
{
static int index = 0;
if (x > y)
return NULL;
struct tree *new = insert(preorder[index++]);
if (x == y)
return new;
int inIndex = findNode(inorder, x, y, new->data);
new->left = binarytree(inorder, preorder, x, inIndex - 1);
new->right = binarytree(inorder, preorder, inIndex + 1, y);
return new;
}
int findNode(char temp[], int x, int y, char val)
{
int i;
for (i = x; i <= y; i++)
{
if (temp[i] == val)
return i;
}
}
struct tree *insert(int data)
{
struct tree *tree = (struct tree *)malloc(sizeof(struct tree));
tree->data = data;
tree->left = NULL;
tree->right = NULL;
return (tree);
}
void postorder(struct tree *tree)
{
FILE *ofp;
ofp = fopen("201262480.txt", "w");
if (tree == NULL)
{
return;
}
else
{
postorder(tree->left);
postorder(tree->right);
fprintf(ofp, "%d ", tree->data);
}
}
int main()
{
int i = 0, j;
int temp[100];
char c, buffer[20];
FILE *fp;
fp = fopen("input.txt", "r");
if (fp != NULL)
{
while (1 == fscanf(fp, "%d ", &temp[i]))
{
i++;
}
char inorder[i / 2];
char preorder[i / 2];
for (j = 0; j < i / 2; j++)
{
preorder[j] = temp[j];
inorder[j] = temp[j + (i / 2)];
}
int length = sizeof(inorder) / sizeof(inorder[0]);
struct tree *root = binarytree(inorder, preorder, 0, length - 1);
postorder(root);
}
else
{
printf("Cannot open File!\n");
}
return 0;
}
我有这样的输入文件:
1 2 3 4 5 6 7
3 2 4 1 6 5 7
***
1 1 2
1 1 2
***end of input***
它向上扫描直到 * 符号。它处理数字并打印输出文件。现在我有两个问题。
注意:整个代码有效。无需编辑二叉树之类的东西,只需扫描整数并将输出写入文件即可,这让我抓狂。
请帮忙!
最佳答案
使用a
访问模式而不是w
:
w
:为输出操作创建一个空文件。
每次调用 postorder()
函数时,您都会覆盖 201262480.txt
文件。这就是输出为 1
的原因:postorder()
函数的最后一次调用会覆盖 201262480.txt
并写入 1
那里。
a
:在文件末尾打开文件输出。
使用此访问模式,您将获得预期的输出。
void postorder(struct tree *tree)
{
FILE *ofp;
ofp = fopen("201262480.txt", "a"); // I've changed "w" to "a".
// Now the output will be proper.
if (tree == NULL)
{
fclose(ofp);
return;
}
else
{
postorder(tree->left);
postorder(tree->right);
fprintf(ofp, "%d ", tree->data);
}
fclose(ofp);
}
预期输出:
3 4 2 6 7 5 1
更新:
我已经修改了你的 postorder()
函数,所以它会在你每次运行程序时覆盖输出文件。
代码如下:
void postorder(struct tree *tree)
{
unsigned int pointerValue = 0;
static int overwriteFile = 0; // The file hasn't been overwritten yet.
FILE *ofp = NULL;
ofp = fopen("201262480.txt", "a");
fseek(ofp, 0L, SEEK_END); // Moving the pointer to the end of file.
pointerValue = ftell(ofp); // Checking if it is not `0` (the file contains some data)
if (pointerValue != 0) {
if (overwriteFile == 0) {
fclose(ofp);
ofp = fopen("201262480.txt", "w"); // "w": Create an empty file for output operations.
fclose(ofp);
ofp = fopen("201262480.txt", "a"); // "a": Open file for output at the end of a file.
overwriteFile = 1; // The file was overwritten.
// So when you call this function next time,
// it will not overwrite the file.
// It only does it once when you run the program.
}
}
if (tree == NULL)
{
return;
}
else
{
postorder(tree->left);
postorder(tree->right);
fprintf(ofp, "%d ", tree->data);
}
fclose(ofp);
}
关于c - 如何从输入中正确扫描一行并写入输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18276623/
我有这个代码 var myChart = new FusionCharts("../themes/clean/charts/hbullet.swf", "myChartId", "400", "75
既然写入是立即进行的(复制到内核缓冲区并返回),那么使用 io_submit 进行写入有什么好处? 事实上,它 (aio/io_submit) 看起来更糟,因为您必须在堆上分配写入缓冲区并且不能使用基
我正在使用 mootool 的 Request.JSON 从 Twitter 检索推文。收到它后,我将写入目标 div 的 .innerHTML 属性。当我在本地将其作为文件进行测试时,即 file:
最终,我想将 Vertica DB 中的数据抓取到 Spark 中,训练机器学习模型,进行预测,并将这些预测存储到另一个 Vertica DB 中。 当前的问题是确定流程最后部分的瓶颈:将 Spark
我使用 WEKA 库编写了一个 Java 程序, 训练分类算法 使用经过训练的算法对未标记的数据集运行预测 将结果写入 .csv 文件 问题在于它当前写出离散分类结果(即算法猜测一行属于哪个类别)。我
背景 - 我正在考虑使用 clickonce 通过 clickonce(通过网站)部署 WinForms 应用程序。相对简单的应用程序的要素是: - 它是一个可执行文件和一个数据库文件(sqlite)
是否有更好的解决方案来快速初始化 C 数组(在堆上创建)?就像我们使用大括号一样 double** matrix_multiply(const double **l_matrix, const dou
我正在读取 JSON 文件,取出值并进行一些更改。 基本上我向数组添加了一些值。之后我想将其写回到文件中。当我将 JSONArray 写回文件时,会被写入字符串而不是 JSONArray 对象。怎样才
我为两个应用程序使用嵌入式数据库,其中一个是服务器,另一个是客户端。客户端应用程序。可以向服务器端发送获取数据请求以检索数据并显示在表格(或其他)中。问题是这样的:如何将获取的数据保存(写入)到页面文
是否有更好的解决方案来快速初始化 C 数组(在堆上创建)?就像我们使用大括号一样 double** matrix_multiply(const double **l_matrix, const dou
从问题得出问题:找到所有 result = new ArrayList(); for (int i = 2; i >(i%8) & 0x1) == 0) { result.add(i
由于某种原因,它没有写入 CSV。谁能明白为什么它不写吗? def main(): list_of_emails = read_email_csv() #read input file, cr
关闭。 这个问题是 not reproducible or was caused by typos 。它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能在这里出现,
我目前正在开发一个保存和加载程序,但我无法获得正确的结果。 编写程序: #include #include #define FILENAME "Save" #define COUNT 6 type
import java.io.*; public class Main2 { public static void main(String[] args) throws Exception {
我需要使用预定义位置字符串“Office”从所有日历中检索所有 iOS 事件,然后将结果写入 NSLog 和 UITextView。 到目前为止,这是我的代码: #import "ViewCo
我正在尝试将 BOOL 值写入 PFInstallation 中的列,但会不停地崩溃: - (IBAction)pushSwitch:(id)sender { NSUserDefaults *push
我以前在学校学过一些简单的数据库编程,但现在我正在尝试学习最佳实践,因为我正在编写更复杂的应用程序。写入 MySQL 数据库并不难,但我想知道让分布式应用程序写入 Amazon EC2 上的远程数据库
是否可以写回到ResourceBundle?目前我正在使用 ResourceBundle 来存储信息,在运行时使用以下内容读取信息 while(ResourceBundle.getBundle("bu
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!