int getchar(void); //返回来自输入设备的下一个字符 int putchar(int ch); //打印它的参数(不带回车换行)例如: char c = getchar(); putchar(c);
getchar和putchar仅处理字符,因此它们比通用的scanf和printf更快而且更简洁
char *gets(char *str); //从标准输入获得一个字符串,将其传给参数 int puts(const char *str); //从标准输出打印参数字符串若正确读取的话,gets会返回所获得字符串的地址。若读取错误,则返回NULL。
例如:
char s1[80]; char * s2; s2 = gets(s1); //s1 == s2,s2只能是char指针,不能是数组名Tips:gets会自动丢弃末尾的换行符
Tips:与printf不同,puts会自动加回车换行
int scanf(const char *format, …);返回正确读入变量的个数;若输入EOF,则返回-1scanf与gets的区别在于,scanf更基于获得单词而不是获取字符串,也就是说scanf以遇到的第一个非空白字符开始,到第一个空白字符结束。如:
char str[80]; scanf("%s", str); //若输入" hello world",则str的值仅为"hello"而gets会原模原样的输入
看下面这个例子,理解上面提到的几个I/O函数的用法
int main(){ char c; char s[80]; while((c = getchar()) != EOF){ //若输入EOF则结束 putchar(c); } puts("End of getchar&putchar"); //puts()会自动加回车换行 while(gets(s) != NULL){ //输入错误则gets()返回NULL puts(s); } puts("End of gets&puts"); while(fgets(s, 80, stdin) != NULL){ //输入错误则fgets()返回NULL fputs(s, stdout); } fputs("End of fgets&fputs\n", stdout); //fputs()不会自动加回车换行,因此要自己加上\n return 0; }