美文网首页
C语言学习杂记(3)—字符串格式化输入输出

C语言学习杂记(3)—字符串格式化输入输出

作者: juconcurrent | 来源:发表于2016-02-25 23:37 被阅读69次

C语言的字符串不是基本类型,而是字符序列,可以把字符串看成一个以'\0'结尾的字符数组。'\0'其实是一种特殊字符,其数值为0。

一、示例

先看一个示例:

#include <stdio.h>
#include <string.h>
#define STIP "127.0.0.1"

int main(void)
{
    char name[40];
    int length;
    int size_of;
    int age;

    printf("please input your name.\n");
    scanf("%s", name);
    length = strlen(name);
    size_of = sizeof name;
    printf("hi %s, your name's length is %d and it's size of is %d\n", name, length, size_of);
    printf("please input your age.\n");
    scanf("%d", &age);
    printf("yes, %s, your age is %d, thanks for your input.\n", name, age);
    printf("now, the #define string is %s.\n", STIP);

    return 1;
}

这个程序可能会输出以下结果

please input your name.
zhangfb
hi zhangfb, your name's length is 7 and it's size of is 40
please input your age.
17
yes, zhangfb, your age is 17, thanks for your input.
now, the #define string is 127.0.0.1.

我们有几点需要注意
1、字符串是使用字符数组来表示的;
2、输入字符串,跟输入数字不一样,不需要加入&符号,因为字符串的名称代表的是其所在字符数组首个元素的地址,且字符串的打印需要使用%s;
3、使用strlen函数返回的是字符串的长度(除'\0'之外的字符个数),而使用sizeof关键字返回的则是存储字符串的长度;
4、#define STIP "127.0.0.1"的定义,我们称之为宏定义,代码中STIP地方会被"127.0.0.1"替换,所以在STIP之后不能加“=”,如果加了,则会连”=“一并纳入替换;
5、strlen函数需要使用string.h中的声明;
6、双引号并不是字符串的一部分,它只是告知编译器其中包含了一个字符串。

二、常量与预处理器

1、常量

所谓常量,就是不可变的量。我们在什么时候或为什么要使用常量?举例来说,我们根据圆直接径计算周长,可以表示如下:

perimeter = 3.14159 * diameter;

但是如果我们用另一种方式来表达

pi = 3.14159;
perimeter = pi * diameter;

它带来的好处主要有两点:1、一个名字比一个数字表达更多的意思;2、当常量被程序多次引用的时候,如果要修改其值,只需修改一处。这就是为什么我们要使用常量的原因。

2、预处理器定义常量

C的预处理器除了使用#include <头文件.h>之外,还可以定义常量。

#define TAXRATE 0.015
#define TAXRATE1=0.015 // 这样写是不被推荐的,虽然运气好时不会出现错误。

当真实编译程序的时候,值TAXRATE出现的地方都会被0.015所替换。尤其需要注意的时候,使用预处理器定义常量的时候,中间不能加“=”号。至于TAXRATE全部是大写字母,只是一种约定或传统,即使你使用taxrate,仍然不会出现任何功能和语法上的错误。在其他一些项目中,可能会约定,常量需要命名成以c_或k_开头。但是更常用的却是常量命名成大写。

3、const修饰符

第二种定义常量的方法是使用const修饰符,即:

const int MONTHS = 12; // const修饰的变量,其实就是常量
4、系统常量

除了可以自己定义常量,系统本身也带了很多常量。例如,limits.h和float.h就有很多常量。现简单举例如下:

#include <stdio.h>
#include <limits.h>

int main(void)
{
    printf("max int is %d\n", INT_MAX);
    printf("min int is %d\n", INT_MIN);

    return 1;
}

输出如下:

max int is 2147483647
min int is -2147483648

三、printf()和scanf()

这两个函数的引入,带来的直接好处是交互更友好和有趣,不再是枯燥不变的程式了。在整个计算机中,IO的引入可谓是一种伟大的进步。我们日常点点滴滴记录,都是先由自身进行输入,再由计算机进行处理,并输出到缓存、磁盘或网络etc。尽管其对外表现不同,但其工作方式却是相同的,只是流向不同而已。在C语言中,他们的函数声明也是大同小异,都是由一个控制字符串,外加可变参数列表组成。

1、printf()函数

使用此函数打印输出的指令,取决于实际的值类型。比如打印int类型变量使用%d,打印字符使用%c,打印字符串使用%s。这些符号被称为转换说明。因为真实的转换很复杂,类型也很多,不管是作为备忘,还是作为增强记忆,都有必要梳理整理出来,现罗列如下表。

转换说明 输出
%a 浮点数十六进制计数法(小写)
%A 浮点数十六进制计数法(大写)
%c 字符
%d 有符号十进制数
%e 浮点数,e计数法(小写)
%E 浮点数,E计数法(大写)
%f 浮点数,十进制计数法
%g 根据值的不同,自动选择%e、%f输出,%e输出是在指数小于-4或大于精度时使用
%G 同上,只是使用大写方式
%i 有符号十进制数(同%d)
%o 无符号八进制整数
%p 指针
%s 字符串
%u 无符号十进制数
%x 使用十六进制数字0-f的无符号整数
%X 同上,只是字母为大写
%% 打印一个百分号

另外,我们可以在%和转换说明字符之间加入修饰符加以修改,现罗列部分。

修饰符
标记 意义
- 项目左对齐,例如:%-20s
+ 有符号的值若为正,则显示带加号的符号;若为负,则显示带减号的符号,例如:%+6.2f
(空格) 有符号的值若为正,则显示空格;若为负,则显示带减号的符号,例如:%+6.2f
# 使用转换说明的可选形式。若为%o形式,则以0开始;若为%x或%X开始,则以0x或0X开始。对于所有浮点形式,#保证了即使不跟任何数字,也打印一个小数点字符。对于%g和%G格式,它防止尾随0被删除
0 对于所有数字格式,用前导零而不是用空格填充字段宽度。若出现-标记或指定了精度则忽略该标记。

相关文章

  • Python格式化字符串

    格式化字符串 在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。Pytho...

  • Python格式化字符串

    格式化字符串 在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。Pytho...

  • 格式符

    在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。Python中内置有对字...

  • C语言学习杂记(3)—字符串格式化输入输出

    C语言的字符串不是基本类型,而是字符序列,可以把字符串看成一个以'\0'结尾的字符数组。'\0'其实是一种特殊字符...

  • C语言学习04.格式化输入输出

    C语言的格式化输入输出靠的是printf和scanf函数,在stdio.h头文件。 格式化输出: Printf具有...

  • C语言的基本输入与输出函数(全解)

    C语言的基本输入与输出函数 1.1.1 格式化输入输出函数Turbo C2.0 标准库提供了两个控制台格式化输入、...

  • 学习C语言基础知识 | 实践篇

    C语言的数据类型 (1)输入输出 make && run (2)C语言方法的调用 make && run (3)C...

  • Python格式化字符串

    格式化操作符(%) "%"是Python风格的字符串格式化操作符,非常类似C语言里的printf()函数的字符串格...

  • 04-枚举常量

    Go语言枚举 c语言中的枚举 Go语言枚举 iota迭代器 Go语言输出函数 fmt.Printf("格式化字符串...

  • 字符串格式化:String.format()

    常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的读...

网友评论

      本文标题:C语言学习杂记(3)—字符串格式化输入输出

      本文链接:https://www.haomeiwen.com/subject/yazikttx.html