I'm having a problem in reading and writing a file. I'm reading data from input.txt
, calculating (Bytelandian problem) and writing the result to a file.
If I remove the last section of the code,
/*
for ( input_counter=0; input_counter<no_of_cases; input_counter++)
{
sprintf(buffer, "%d", max[input_counter]);
fputs(buffer, fw);
}
fclose(fw);
*/
everything works well (except that I am unable to write to a file). But I am able to compile and run the code.
However on including that code, I get the error "segmentation error (core dumped)". Any idea what might be happening?
#include<stdio.h>
#include <stdlib.h>
int Calculate_max (int number){
int counter;
int store[number+1];
store[0] = 0;
if (number>=1){
store[1] = 1;
}
if (number>=2){
store[2] = 2;
}
for (counter=3; counter<=number; counter++){
store[counter] = store [counter/2] +store[counter/3]+store[counter/4];
if (store[counter]<counter){
store[counter]=counter;
}
}
return store[number];
}
int main(void){
int no_of_cases=0;
int number[10];
int max[10];
int input_counter=0;
char line [ 128 ];
char buffer [ 16 ];
FILE *fr= fopen ("input.txt", "rt"); /* declare the file pointer */
FILE *fw= fopen ("output.txt", "W+"); /* declare the file pointer */
if ( fr != NULL )
{
if ( fgets ( line, sizeof line, fr ) != NULL ) /* read a line */
{
no_of_cases = atoi (line);
//printf("no %d \n", no_of_cases);
}
if (no_of_cases==0)
{
printf("No Cases!!");
}
else
{
for ( input_counter=0; input_counter<no_of_cases; input_counter++)
{
if ( fgets ( line, sizeof line, fr ) != NULL )
{
number[input_counter] = atoi (line);
//scanf (line, number[input_counter], "%d");
//printf(" %s \n " , line);
//fputs ( line, stdout );
}
max[input_counter]= Calculate_max(number[input_counter]);
//fwrite(max[input_counter],sizeof(int),1,fp);
//fprintf(fw, "%d \n", max[input_counter]);
printf("%d \n", max[input_counter]);
}
}
fclose(fr);
}
/*
for ( input_counter=0; input_counter<no_of_cases; input_counter++)
{
sprintf(buffer, "%d", max[input_counter]);
fputs(buffer, fw);
}
fclose(fw);
*/
return 0;
}
The new code:
#include<stdio.h>
#include <cstdlib>
long long Calculate_max ( long long number)
{
long long counter;
long long store[number+1];
store[0] = 0;
if (number>=1){
store[1] = 1;
}
if (number>=2){
store[2] = 2;
}
for (counter=3; counter<=number; counter++){
store[counter] = store [counter/2] +store[counter/3]+store[counter/4];
if (store[counter]<counter){
store[counter]=counter;
}
}
return store[number];
}
int main(void)
{
int no_of_cases=10;
long long number;
long long max[10];
int input_counter=0;
char line [128];
char buffer [ 64 ];
FILE *fr= fopen ("input.txt", "rt"); /* declare the file pointer */
FILE *fw= fopen ("output.txt", "w+"); /* declare the file pointer */
if ( fr != NULL )
{
while ( fgets ( line, sizeof line, fr ) != NULL )
{
//number= atoll (line);
number=1000000000;
max[input_counter]= Calculate_max(number);
input_counter++;
printf("test \n");
}
fclose(fr);
}
printf("writing \n");
no_of_cases=input_counter;
for ( input_counter=0; input_counter<no_of_cases; input_counter++)
{
sprintf(buffer, "%lld", max[input_counter]);
fputs(buffer, fw);
fputs("\n", fw);
}
fclose(fw);
return 0;
}