1

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;
}
2
  • You really have to double check your type casts... Commented Sep 25, 2013 at 13:28
  • Is there an error message or is the program printing the wrong output? Commented Sep 25, 2013 at 13:57

1 Answer 1

2

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...

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.