int a=020的奇怪输出 是16
一个朋友问了我这样一个问题:为什么a的输出结果是16?
#include<stdio.h>
int main()
{
int a,b,c;
a=020;
b=0*20;
c=20;
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
在这里插入代码片
我要求对方改变a的值为20的时候,输出又是正常的20,这让我有些奇怪,于是对她说我不知道。
这几天在网络上到处乱逛,倒是看到了这个知识点。
首先,当我们定义一个数字的时候,int a=020,实际上是定义了一个八进制的数字20,当使用%d输出的时候,实际上是按照十进制的模式输出八进制的数字20,计算机会自动地将八进制的20转化为十进制的16,这就是为什么int a=20的时候,用%d输出是20;而用int a=020的时候,输出的是16的缘故。
在c语言中,有十进制,八进制和十六进制可以定义,十进制不用任何特别地表示就是一个十进制的数字,例如int a=11,用%d输出的就是一个十进制的11,八进制则需要在数字前面添加一个0,用八进制来表示十进制的11,则需要int a=013;十六进制同理,但是十六进制的0变成了
输入0x,例如十进制的十七,用十六进制表达起来就是int a=11;
前一段时间我在处理文本输入输出的时候,为了数字的对齐,经常会使用%02d这种格式输出数字,这个的问题在于,当我使用一个读取文本的时候,数字会被识别为十六进制吗?
结果测试,能力有限,我只能使用如下代码获取文本中的数据,文本数据如下:
01 01
1 1
01 1
22 022
代码如下:
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
int main()
{
char buf1[10][100];
char buf[MAX_LINE]; /*缓冲区*/
FILE *fp; /*文件指针*/
int len; /*行字符个数*/
char delims[] = " ";
if((fp = fopen("data.txt","r")) == NULL)
{
perror("fail to read");
exit (1) ;
}
while(fgets(buf,MAX_LINE,fp) != NULL)
{
sscanf(buf, "%d %d", buf1[1],buf1[2]);
printf("%d %d \n ",buf1[1],buf1[2]);
}
return 0;
}
使用这个格式读取

```c

,当使用%s %s读取输出的时候,则是正常的。
1071

被折叠的 条评论
为什么被折叠?



