navneet kr
navneet kr

Reputation: 11

how to use char for taking double value..using character array

please reply what is the problem with double in case 3?? test case 3 its giving run time error.. rest cases are working fine i am unable to figure out whats the problem there in scanf where it is taking input from user as double.

#include<stdio.h>
#include<stdlib.h>

int main()
{
char x[30]={0}, ch_type[30]={1};
int ch=1,idx=0,cond_var2=0,temp=0, choice=0;
int curr_arr_size=0, arr_size=sizeof(x);

 while(ch)
 {    
  printf("\n\n1.Create a character \n2.create a number \n3.create a double \n4.current status \n0.exit\n");
  printf("\nenter the choice:\t");    
  scanf("%d",&choice);
  switch(choice)
  {
    case 0:
            exit(0);
            break;

    case 1:
        if ((arr_size-curr_arr_size)>=sizeof(char))
        {
            ch_type[idx++]=sizeof(char);
            printf("\n enter the character:\t");
            fflush(stdin);
            scanf("%c",(x+curr_arr_size));
            curr_arr_size=curr_arr_size+sizeof(char);
        }
        else
            printf("no space for any characters.\n");
        break;

    case 2: 
        if ((arr_size-curr_arr_size)>=sizeof(int))
        {
            ch_type[idx++]=sizeof(int);
            printf("\n enter the integer:\t");
            scanf("%d",(x+curr_arr_size));
            curr_arr_size=curr_arr_size+sizeof(int);
        }
        else
            printf("no space for any integer.\n");
        break;

    case 3:
        if ((arr_size-curr_arr_size)>=sizeof(double))
        {
            ch_type[idx++]=sizeof(double);
            printf("\n enter the double:\t");
            scanf("%lf",(x+curr_arr_size));             
            curr_arr_size=curr_arr_size+sizeof(double);
        }
        else
            printf("no space for any doubles.\n");
        break;

    case 4 :            
        while(cond_var2<idx)
        {
            if(ch_type[cond_var2]==sizeof(char))
                printf("\n%d value is %c",cond_var2+1,*(x+temp));
            if(ch_type[cond_var2]==sizeof(int))
                printf("\n%d value is %d",cond_var2+1,*(x+temp));
            if(ch_type[cond_var2]==sizeof(double))
                printf("\n%lf value is %c",cond_var2+1,*(x+temp));

            temp=temp+ch_type[cond_var2];
            cond_var2++;
        }
        printf("\nnumber of the bytes free:\t%d",arr_size-curr_arr_size);
        break;
    default :
            ch=0;
            printf("\nWrong choice\n");
            break;
  }
  printf("arsize:%d\ncur_size:%d\n\n",arr_size,curr_arr_size);
}
return 0;
}

Upvotes: 1

Views: 130

Answers (1)

Karoly Horvath
Karoly Horvath

Reputation: 96266

The compiler (at least gcc) tells you all you have to know:

x.c:66:17: warning: format ‘%lf’ expects argument of type ‘double’, but argument 2 has type ‘int’ [-Wformat]

printf("\n%lf value is %c",cond_var2+1,*(x+temp));

You switched the arguments, and you need to cast:

printf("\n%d value is %lf",cond_var2+1,*(double*)(x+temp));

Note: there are more warnings, fix those as well...

Upvotes: 2

Related Questions