printf函数能够对各种不同类型的参数进行格式化编排和输出。每个参数在输出流中的表示形式由格式化参数format控制,它是一个包含需要输出的普通字符和转换控制符代码的字符串。
#include <stdio.h>
int printf(const char* format, ...);
int sprintf(char* s, const char* format, ...);
int fprintf(FILE* stream, const char* format, ...);
printf函数把自己的输出送到标准输出,fprintf函数把自己的输出送到一个指定的文件流。sprintf函数把自己的输出和一个结尾孔字符写到作为参数传递过来的字符串s里。
printf("some numbers: %d,%d and %d\n", 1, 2, 3);
%d,%i 输出十进制整数
%o,%x 输出八进制或者十六进制整数
%c 输出一个字符
%s 输出一个字符串
%d 输出一个浮点数
%e 输出科学计数法格式的浮点数
%g 输出(双精度)浮点数 printf函数返回一个整数一表明它输出的字符个数。
sprintf的返回值里并没有算上结尾的那个空字符。
3.6.2 scanf、fscanf和sscanf函数
scanf函数从一个文件流里读取数据,并把数据值放到以指针参数形式传递过来的地址处的变量中。
#include <stdio.h>
int scanf(const char *format, ...);
int fscanf(FILE* stream, const char* format,...);
int sscanf(const char* s, const char* format, ..);
scanf系列函数中,那些普通字符是用于指定在输入数据里必须出现的字符。例如:
int num;
scanf("hello %d", &num);
这个scanf调用只有在标准输入中接下来的五个字符匹配"hello"的情况下才会成功。
使用%c控制符从输入中读取一个字符,它不会跳过起始的空白字符。
使用%s控制符来扫描字符串,则会跳过起始的空白字符,并且会在字符串里出现的第一个空白字符处停下来,所以最好使用它来读取单词而不是一般意义上的字符串。
使用%[]控制符读取由一个字符集和中的字符构成的字符串。格式字符串%[A-Z]将读取一个由大写字母构成的字符串。如果字符集中第一个字符是^,将表示将读取一个不属于由该字符集和中的字符构成的字符串。因此,读取一个其中带空格的字符串,并且在遇到第一个逗号时停止,可以使用%[^,]。
给定下面输入行:
hello, 1234, 5.678, X, string to the end of the line
char s[256];
int n;
float f;
char c;
scanf("hello,%d,%g,%c,%[^\n], &n,&f,&c,s);
scanf函数的返回值是它成功读取的数据项个数,如果在读取第一个数据项时失败了,它的返回值将是0。如果在匹配第一个数据项之前就已经到达了输入的尾,就返回EOF。