C 语言输入输出完全掌握:标准 I/O 与格式化控制
输入指向程序提供数据,可来自文件或命令行。C 提供内置函数集读取输入并按需提供给程序。
输出指在屏幕、打印机或文件显示数据。C 提供内置函数集将数据输出到屏幕并保存为文本或二进制文件。
标准文件
C 语言将所有设备视为文件。显示器等设备以同文件方式寻址,程序执行时自动打开以下三个文件提供键盘和屏幕访问:
| 标准文件 | 文件指针 | 设备 |
|---|---|---|
| 标准输入 | stdin | 键盘 |
| 标准输出 | stdout | 屏幕 |
| 标准错误 | stderr | 屏幕 |
文件指针是访问文件读写的手段。本节解释如何从屏幕读值及在屏幕打印结果。
getchar() 与 putchar() 函数
int getchar(void) 从屏幕读取下一个可用字符并作为整数返回。每次仅读单字符。可在循环中用此法读多字符。
int putchar(int c) 将传入字符输出到屏幕并返回同字符。每次仅输出单字符。可在循环中用此法显示多字符。示例:
#include <stdio.h> int main( ) { int c; printf( "Enter a value :"); c = getchar( ); printf( "\nYou entered: "); putchar( c ); return 0; }
编译执行后等待输入。输入文本按回车后,程序读取单字符并显示:
$./a.out Enter a value : this is test You entered: t
gets() 与 puts() 函数
char *gets(char *s) 从 stdin 读一行到 s 指向缓冲区,直到遇换行符或 EOF。
int puts(const char *s) 向 stdout 写字符串 's' 及尾随换行符。
注意: gets() 已弃用,建议用 fgets() 替代。
#include <stdio.h> int main( ) { char str[100]; printf( "Enter a value :"); gets( str ); printf( "\nYou entered: "); puts( str ); return 0; }
编译执行后等待输入。输入文本按回车后,程序读完整行并显示:
$./a.out Enter a value : this is test You entered: this is test
scanf() 与 printf() 函数
int scanf(const char *format, ...) 从标准输入流 stdin 读输入并按提供的 format 扫描。
int printf(const char *format, ...) 向标准输出流 stdout 写输出并按格式产生输出。
format 可以是简单常量字符串,也可指定 %s、%d、%c、%f 等打印或读取字符串、整数、字符、浮点数。有许多其他格式选项可按需使用。简单示例:
#include <stdio.h> int main( ) { char str[100]; int i; printf( "Enter a value :"); scanf("%s %d", str, &i); printf( "\nYou entered: %s %d ", str, i); return 0; }
编译执行后等待输入。输入文本按回车后,程序读取输入并显示:
$./a.out Enter a value : seven 7 You entered: seven 7
注意 scanf() 期望输入格式与提供的 %s 和 %d 一致,即必须提供 "字符串 整数" 形式输入。若提供 "字符串 字符串" 或 "整数 整数" 则视为错误输入。其次,读字符串时 scanf() 遇空格即停止,故 "this is test" 对 scanf() 是三个字符串。
C语言