Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中打印特定数据类型的值?_C - Fatal编程技术网

在C中打印特定数据类型的值?

在C中打印特定数据类型的值?,c,C,我试图打印出三列: 值:数据类型:大小(以字节为单位): 到控制台: #include <stdio.h> /* print out the primitive (basic built in) data types for C along with their size in bytes. */ int main(){ char letter = 'j'; short int x = 55437; long int y = 1234567; doub

我试图打印出三列:

值:数据类型:大小(以字节为单位):

到控制台:

#include <stdio.h>
/*
print out the primitive (basic built in) data types for C
along with their size in bytes.
*/
int main(){
    char letter = 'j';
    short int x = 55437;
    long int y = 1234567;
    double dbl = 5.99;
    float boobs = 4.66;

    printf("Value:    Datatype:  Size(in bytes):\n\n");

    printf("%c\t  char\t   %c\n", letter, sizeof(letter));
    printf("%d\t  short\t   %d\n", x, sizeof(x));
    printf("%ld\t  long\t   %ld\n", y, sizeof(y));
    printf("%lf\t  double\t   %lf\n", dbl, sizeof(dbl));
    printf("%f\t  float\t   %f\n", boobs, sizeof(boobs));
}
#包括
/*
打印出C的基本(基本内置)数据类型
以及它们的大小(以字节为单位)。
*/
int main(){
字符字母='j';
短整数x=55437;
长整数y=1234567;
双dbl=5.99;
浮胸=4.66;
printf(“值:数据类型:大小(字节):\n\n”);
printf(“%c\t char\t%c\n”,字母,大小(字母));
printf(“%d\t短\t%d\n”,x,sizeof(x));
printf(“%ld\t长\t%ld\n”,y,sizeof(y));
printf(“%lf\t double\t%lf\n”,dbl,sizeof(dbl));
printf(“%f\t float\t%f\n”,boobs,sizeof(boobs));
}
我差一点就知道了,但仍然有一些不正确的输出:


为什么我的短int打印为-10099(与我已将其分配给55437的内容相矛盾)?为什么数据类型列中的double和float数据类型说明符会向右移位?

当在
printf
中用
%c“
打印值时,它会转换为
无符号字符。但是,对于ASCII,仅显示从
0x20
0x7E
的值。其他字符的显示方式取决于终端。

试试这个

printf("%c\tchar\t   %d\n", letter, (int)sizeof(letter));
printf("%hd\tshort\t   %d\n", x, (int)sizeof(x));//55437 > max of int16
printf("%ld\tlong\t   %d\n", y, (int)sizeof(y));
printf("%f\tdouble\t   %d\n", mile, (int)sizeof(mile));
printf("%f\tfloat\t   %d\n", wage, (int)sizeof(wage));
试试这个:)


您没有为其他变量类型使用适当的格式说明符<代码>%c
仅用于字符。谢谢大家。我让它看起来正确:)我如何标记我的问题已解决?单击答案旁边您认为最好(或对您帮助最大)的复选标记。右移是因为\t为8个字符,第一个制表符位于第7列,每个连续制表符位于右侧8列。因此,当一个值覆盖第一个制表符位置时,输出一个制表符将跳转到第二个制表符位置。一个短制表符可以存储的最大值是32767,再大一点,它就像汽车里程表一样“滚动”;更糟糕的是,在最终返回到0之前,它会变大并为负值。您是否知道int16在C中的最大值是多少?如果我切换到一个比这个小的数字,它可能会解决我的-10099问题。@SamPeterson,因为您环境中的短字符是2字节,55437超出了它的表示形式的上限
short
(2字节整数):-32768~32767您忘记将(数据类型)附加到sizeof的左侧。
printf("%c\t  char\t   %g\n", letter, sizeof(letter));
printf("%d\t  short\t   %g\n", x, sizeof(x));
printf("%ld\t  long\t   %g\n", y, sizeof(y));
printf("%g.2\t  double\t   %g\n", dbl, sizeof(dbl));
printf("%f.2\t  float\t   %g\n", boobs, sizeof(boobs));