如何使用char来获取double value ..使用字符数组

时间:2013-09-25 13:02:28

标签: c

请回复案例3中双重问题是什么?测试用例3给出运行时错误.. 休息的情况下工作正常 我无法弄清楚scanf中的问题是什么,它将用户的输入视为双倍。

#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;
}

1 个答案:

答案 0 :(得分:2)

编译器(至少是gcc)告诉你所有你需要知道的事情:

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));

你切换了参数,你需要施放:

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

注意:还有更多警告,也可以修复它们......