scanf和printf函数处理不同进制

来源:互联网 发布:java 数组分割 编辑:程序博客网 时间:2024/06/07 22:51

scanf函数,与printf函数一样,都被定义在stdio.h里,因此在使用scanf函数时要加上#includestdio.h。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。

printf函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf(“<格式化字符串>”, <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原 样输出; 另一部分是格式化规定字符, 以”%”开始, 后跟一个或几个规定字符,
用来确定输出内容格式。
参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用”,”分开, 且顺序一一对应, 否则将会出现意想 不到的错误。

 

1 #include “stdafx.h”

 

2 int main(void)
3 {
4   /* 定义多个变量以存储多个不同整形数据*/
5    int int_dec, int_hex, int_oct;                      /*定义三个int变量*/
6   int constant = 74;                                  /*定义并初始化变量constant*/

7    /*用三种进制形式给整形变量赋值*/
8   scanf(“%d”, &int_dec);                                 /*以十进制“d”的形式为int_dec赋值*/
9   scanf(“%x”, &int_hex);                                 /*以十六进制“x”的形式为int_hex赋值*/ 10    scanf(“%o”, &int_oct);                                 /*以八进制“o”的形式为int_oct赋值*/

11   /*用十进制的形式打印三个变量*/
12    printf(“int_dec(十进制) = %d/n”, int_dec);       /* 打印十进制的形式*/
13   printf(“int_hex(十六进制)= %d/n”, int_hex);    /* 打印十六进制的形式*/
14    printf(“int_oct(八进制)= %d/n”, int_oct);        /* 打印八进制的形式*/

15    /*把十进制74用三种进制分别打印*/
16    printf(“(Dec)74 = %d/n”, constant);                /* 输出74的十进制形式*/
17   printf(“(Hex)74 = %X/n”, constant);                /* 输出74的十六进制大写形式*/
18    printf(“(Hex)74 = %x/n”, constant);                /* 输出74的十六进制小写形式*/
19    printf(“(Oct)74 = %o/n”, constant);                /* 输出74的八进制形式*/
20    return 0;
21 }

 

运行程序,安要求输入字符。输入如下的三个整数,中间以空格隔开:22 22 22

得到的运行结果如下。

image

代码分析:

从输出的结果可以看到,同样都是22,由于printf中对应的格式不一样,值也不一样

%d只接受十进制数;%x只接受十六进制数(如果没有输入前缀0x就输入22也视着为0×22)
%o只接受八进制数(如果没有前缀0输入22,也视为022;如果输入的是19就只读入1,因为9不是八进制数)

如果将8-10行的scanf函数输入格式符都是用%i,那么便可以接受所有进制的数,如下:

scanf(“%i”, &int_dec);                                 /*为int_dec赋值*/
scanf(“%i”, &int_hex);                                /*为int_hex赋值*/
scanf(“%i”, &int_oct);                                /*为int_hex赋值*/

如果输入22 22 22运行结果如下:

如果输入22 22 22运行结果如下:

image

这时,如果要输入十六进制数和八进制数,必须显式地以进制符作为前缀。如:22 0×22 022

 

转自http://www.hiadmin.org/code/scanf/