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,则返回-1
scanf与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;
}