getchar介绍
- int getchar ( void );
- 从流中获取字符
- 返回标准输入的下一个字符
- 它等效于使用 stdin 作为参数调用 getc。
getchar()函数不带有任何参数,它从输入队列中返回下一个字符。
ch = getchar();
这条语句读取下一个字符输入,并把该字符的值赋给变量ch。
scanf("%c", &ch);
该语句与上面的语句效果相同。
putchar介绍
- int putchar ( int character );
- 将字符写入stdout
- 将一个字符写入标准输出
- 它等效于使用 stdout 作为参数调用 putc
putchar()函数打印它的参数。
putchar(ch);
此语句把之前赋给ch的值作为字符打印出来。
printf("%c", ch);
该语句与上面的语句效果相同。
总结
- 由于getchar()与putchar()俩个函数只处理字符,所有较scanf()与printf()函数更快,更加简洁。
- 同时getchar()与putchar()不需要转换说明,因为它们只处理字符。
- 这俩个函数通常定义在stdio.h头文件中,它们通常是预处理宏,而不是真正的函数。
#include<stdio.h> int main() { char ch; ch = getchar(); while (ch != '\n') { if (ch == ' ') { putchar(ch); } else { putchar(ch + 1); } ch = getchar(); } return 0; }
观察这段代码,与scanf()进行比较,使用getchar()时每次迭代的末尾有一条“读取语句”。可以将读取和测试合并为一个表达式:
#include<stdio.h> int main() { char ch; while ((ch = getchar()) != '\n') { if (ch == ' ') { putchar(ch); } else { putchar(ch + 1); } } return 0; }
这里可以很好的体现C特有的编程风格——把俩个行为合并成一个表达式。
以上执行的行为是赋值给ch和把ch的值与换行符作比较。
表达式ch=getchar()俩侧的圆括号让其称为!=运算符的左值,读取ch的值后,测试条件相当于是ch!=‘\n’。
【注意】ch=getchar()俩侧的圆括号一定需要存在,因为!=运算符的优先级比=高。
putchar(ch + 1);
此语句可以很好的演示字符实际上是作为整数存储的,表达式ch+1中的ch被转换成int类型,然后int类型的计算结果被传递给接受一个int类型参数的putchar().