c-io
标准文件
-
C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。
-
以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕。
三组输入输出函数
int scanf(const char *format, ...)
函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。int printf(const char *format, ...)
函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。
int getchar(void)
函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。int putchar(int c)
函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符。
- 常带有 warning, 可用
fgets
代替 char *fgets(char *str, int n, FILE *stream)
从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。fgets()
如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。char *gets(char *s)
函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。int puts(const char *s)
函数把字符串 s 和一个尾随的换行符写入到 stdout。
读入变长字符串
读入数字 n, 构建长度为 n 的字符串
-
读入 n
int n; scanf("%d", &n); char *str = (char *)malloc((n + 1) * sizeof(char)); if (str == NULL) { printf("内存分配失败。\n"); return 1; }
-
fgets()
从指定的流 stsream 读取一行,并把它存储在 str 所指向的字符串内#include <stdio.h> #include <stdlib.h> int main() { // ... getchar(); fgets(str, n + 1, stdin); // n + 1, 则读取 n 个字符后停止 str[n + 1] = '\0'; printf("input string is: %s\n", str); free(str); return 0; }
-
scanf()
直接读取 "%s"#include <stdio.h> #include <stdlib.h> int main() { // ... scanf("%s", str); // 注意:str本身为指针 printf("input string is: %s\n", str); free(str); return 0; }
-
scanf()
读取单个字符后,加入 str 数组/** * @brief 不推荐此用法 && 换行符会被正常读入,有干扰且代码不优雅 */ #include <stdio.h> #include <stdlib.h> int main() { // ... int index = 0; char ch; getchar(); // 去掉输入缓冲区遗留的'\n' while (scanf("%c", &ch) != 0) { if (ch == '\n') break; str[index++] = ch; } *(str + index) = '\0'; // str[index] = '\0'; // tow ways of printf function index = 0; while (str[index] != '\0') printf("input char is: %c\n", str[index++]); printf("input string is: %s\n", str); free(str); return 0; }
-
getchar()
while 读入单个字符(返回为一个整数),加入 str 数组/** * 数字和字符相互赋值、比较时,会根据ASCII编码进行转化 */ #include <stdio.h> #include <stdlib.h> int main() { // ... int index = 0; int c; getchar(); while ((c = getchar()) != '\n') { str[index++] = c; } str[index] = '\0'; printf("input string is: %s\n", str); free(str); return 0; }