【C语言天天练(十六)】字符串输出函数puts、fputs和printf

C有三个用于输出字符串的标准库函数puts()、fputs()和printf()。

1、puts()函数只需要给出字符串参数的地址。

#include <stdio.h>

int puts(const char *s);

示例:

#include <stdio.h>

#define DEF "I am libing"

int
main(int argc, char **argv)
{
	char str1[30] = "I am libing.";
	const char *str2 = "I am libing";

	puts("I am libing.");
	puts(DEF);
	puts(str1);
	puts(str2);

	return 0;
}

运行结果测试:

I am libing.
I am libing
I am libing.
I am libing

注意:上面的所有字符串都是单行显示,但并没有在后面添加换行符。这就是,与printf()不同,puts()显示字符串时自动在其后添加一个换行符。

2、fputs()函数时puts()的面向文件版本。两者的区别是:

a、fputs()需要第二个参数来说明要写的文件。

b、与puts()不同,fputs()并不为输出自动添加换行符。

#include <stdio.h>

int fputs(const char *s, FILE *stream);

注意:gets()丢掉输入里的换行符,但puts()为输出添加换行符。另一方面,fgets()存储输入中的换行符,而fputs()也不为输出添加换行符。

技巧:假定写一个循环,读取一行并把它回显在下一行,可以这么写:

char line[80];

while(gets(line))

puts(line);

3、printf()与puts()的区别之一就是printf()并不自动在新行上输出每一个字符串。必须指明需要另起一行的地方。

pintf("%s \n", string);等同于 puts(string);

【C语言天天练(十六)】字符串输出函数puts、fputs和printf

时间: 2024-08-10 00:06:05

【C语言天天练(十六)】字符串输出函数puts、fputs和printf的相关文章

【C语言天天练(六)】指针

指针变量一定要先进行初始化,然后才能使用.初始化指要对指针变量进行赋值,将一个地址值赋值给指针变量.极为常犯的错误是: int *a; *a = 12;   /*未对它进行初始化,没有办法预测12这个值将存储于什么地方*/ 分析几个指针的例子: 1.*d = 10 - *d; 两个间接访问操作.右边的间接访问作为右值使用,所以它的值是d所指向的位置所存储的值(a的值).左边的简介访问作为左值使用,所以d所指向的位置(a)把赋值符右侧的表达式的计算结果作为它的新值. 2.*&a = 2:这条语句的

【C语言天天练(十七)】字符/字符串输出函数fputc、fputs、putc、putchar和puts

#include <stdio.h> int fputc(int c, FILE *stream); int fputs(const char *s, FILE *stream); int putc(int c, FILE *stream); int putchar(int c); int puts(const char *s); fputc()写一个字符c,强制转换成一个unsigned char类型字符,到文件stream. fputs()写一个字符串到stream,省略字符串尾部的'\0

【C语言天天练(十八)】字符/字符串输入函数fgetc、fgets、getc、getchar和gets

#include <stdio.h> int fgetc(FILE *stream); char *fgets(char *s, int size, FILE *stream); int getc(FILE *stream); int getchar(void); char *gets(char *s); fgetc()读取文件指针stream所指向文件的下一个字符,返回值是所读取字符强制类型转换成整数的值,如果到达文件尾部或者出错,则返回EOF. getc()与fgetc()函数相同,只是它

【C语言天天练(十五)】字符串输入函数fgets、gets和scanf

引言:如果想把一个字符串读到程序中,必须首先预留存储字符串的空间,然后使用输入函数来获取这个字符串. 读取字符串输入的第一件事是建立一个空间以存放读入的字符串. char *name; scanf("%s", name); 这段代码虽然可能通过编译,但因为name可以指向任何地方,所以它的输入值可能覆盖以前name所指位置的值. 解决办法是声明一个固定大小的字符数组,或者使用C库里的分配存储空间的函数. 1.gets函数从系统标准输入获得一个字符串,读取字符串直到遇到一个换行符(\n)

【C语言天天练(二十)】scanf函数详解

引言:scanf函数虽然是学习C语言时比较早就接触的一个函数,但在使用过程中,发现真正掌握它却并不容易.本文就通过各种例子来详细的总结一下该函数的各种用法,假设它的调用格式为 scanf("<格式化字符串>",<地址表>). 1.一般使用scanf函数时都是为某个变量赋值,不考虑它的返回值.但是任何函数都是需要返回的(即使返回类型用void,也可以认为只是调用了return语句,只是并没有返回什么东西而已),同样的scanf函数也是有返回的,它的返回值是成功读取

【C语言天天练(十九)】restrict关键词

引言:在内核的系统调用函数里,经常遇到函数的参数使用restrict限定词限定的情况,下面就对该关键词做个总结. 1.restrict关键词是C99特性才添加的,因此在编译使用含有该限定词的程序时,一定要在后边添加-std=c99的标志,使得gcc能够支持c99标准. 2.restrict既然是个限定词,那么它限定什么变量呢?它只能限定指针变量!经过它限定的数据对象,表明指针时访问该数据对象的唯一且初始的方式.注意:这里的唯一表明了,由它限定的指针所指向的数据块,只能由该指针访问,不能由除它之外

【C语言天天练(十二)】命令行参数

C程序的main函数具有两个形参.第1个通常称为argc,它表示命令行参数的数目.第2个通常称为argv,它指向一组参数值. 指针数组:这个数组的每个元素都是一个字符指针,数组的末尾是一个NULL指针.argc的值和这个NULL值都用于确定实际传递了多少个参数.argv指向数组的第1个元素,这就是它为什么被声明为一个指向字符的指针的指针的原因.注意:通常第1个参数就是程序的名称. 示例: #include <stdio.h> int main(int argc, char **argv) {

【C语言天天练(十)】结构体

引言:数据经常以成组的形式存在.在C中,使用结构可以把不同类型的值存放在一起. 结构的声明有两种 1.struct SIMPLE{ int a; char b; float c; };然后用标签SIMPLE去声明结构体变量. 2.typedef struct{ int a; char b; float c; }Simple;然后用Simple去声明结构体变量.此时Simple是个类型名,而不像上面的SIMPLE是个标签. 结构成员可以是标量.数组.指针甚至是其他结构. 结构成员的直接访问用点操作

【C语言天天练(八)】字符串

字符串是一种重要的数据类型,但C语言中没有显式的字符串数据类型.头文件string.h中包含了大多数对字符串的操作函数.因此,有字符串的操作时,一般会包含string.h头文件. 1.字符串的长度:对字符串进行的操作中,经常要对它进行求长度的操作.字符串的长度就是它所包含的字符个数.size_t strlen(char const *string); 注意:strlen返回一个类型为size_t的值,它是一个无符号整数类型.在表达式中使用无符号数可能导致不可预料的结果. 如下面两条表达式并不相等