cppreference权威参考。
查:头文件、函数原型。
----------------------------
函数原型:
int printf(const char* format, ... );
format:格式控制字符串:
用char *format接收字符数组
printf("%d %s %c",) 的双引号表示是字符串。
... : 可变参列表(传任意多个参数)
return : 输出字符的数量
---------------------------
int scanf(const char* format, ... )
return : 成功读入的参数个数
scanf返回值为0 :是合法情况。表示成功读入0个参数 如:scanf("Hello"); 读入的参数没有给任何变量。
scanf返回值为-1:不合法,读入失败
循环读入:
while(scanf("") != EOF) { } // EOF值为-1
Ctrl +Z停止 让scanf返回值为-1
Ctrl + C停止:结束当前进程。os层面强制停止
EOF: end of file 文件末尾,隐藏的文件描述符。用来识别是文件的末尾。
Linux:一切皆文件
-------------------
sprintf(字符数组首地址, format, ...):将标准输出打印到字符串(字符数组)中
return成功打印字符的数量
fprintf(字符数组首地址, format, ...):将标准输出打印到 文件 中
return成功打印字符的数量
------------
空格、换行是分隔符。
printf()的%c能接收读入空格和换行,ASCII里的字符都能接收。
char ch[10];
scanf("%d%s", &a, ch);
printf("a = %d, ch = %c\n", a, ch[0]); // 此方式为工程开发中读入字符的用法
%s(除了空格,换行,tab)
scanf("%[^\n]s", str); // 异或\n,正则表达式
[ ]是字符匹配集:只能匹配集合中的字符,否则会退出。需配合getchar( ); 否则会造成读入死循环。
比如%[a-z]s 只能读入a-z的字符
// 1.test.c
#include <stdio.h>
int main() {
int n;
while (scanf("%d", &n) != EOF) { // 循环读入
printf(" has %d digits!\n", printf("%d", n));
}
return 0;
}
// 2.test.c
#include <stdio.h>
int main() {
char str[100] = {0};
while (scanf("%[^\n]s", str) != EOF) {
getchar(); // 吞掉循环读入最后输入的\n,否则会造成无限死循环
printf(" has %d chars!\n", printf("%s", str)); // 输出字符串的字符数
}
return 0;
}