Jump to content

Stream merge: Difference between revisions

C example added
m (C entry added)
(C example added)
Line 537:
=={{header|C}}==
<lang C>
/*
* Rosetta Code - stream merge in C.
*
* Two streams of numbers (human readable files, integer numbers),
* C89, Visual Studio 2010, macros.
*
*/
 
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 
#define GET(N) { if(fscanf(f##N,"%d",&b##N ) != 1) f##N = NULL; }
#define PUT(N) { printf("%d\n", b##N); GET(N) }
 
void merge(FILE* f1, FILE* f2, FILE* out)
{
int b1;
int b2;
 
if(f1) GET(1)
if(f2) GET(2)
 
while ( f1 || f2 )
{
if ( !f1 ) while (f2 != NULL) PUT(2)
else if ( !f2 ) while (f1 != NULL) PUT(1)
else if ( b1 <= b2 ) PUT(1)
else PUT(2)
}
}
 
int main(int argc, char* argv[])
{
if ( argc < 3 || argc > 3 )
{
puts("streammerge filename1 filename2");
exit(EXIT_FAILURE);
}
else
merge(fopen(argv[1],"r"),fopen(argv[2],"r"),stdout);
 
return EXIT_SUCCESS;
}
</lang>
 
=={{header|Elixir}}==
<lang elixir>defmodule StreamMerge do
Cookies help us deliver our services. By using our services, you agree to our use of cookies.