``复习题
- putchar(getchar())是一个有效的表达式:使程序读取下一个输入字符并打印出来;
getchar(putchar())是无效表达式,因为getchar()不需要参数,而putchar()需要一个参数; - putchar(‘H’)显示字符H;putchar(’\007’):如果系统是ASCII,则发出一声警报;
putchar(’\n’):把光标移至下一行开始;putchar(’\b’)退后一格; - count < essay > essayct 或者 count < essayct < essay
- 都不是有效命令;
- EOF是getchar()和scanf()返回的信号(一个特殊值),表明函数检测到文件结尾。
- C的标准I/O库把不同的文件映射为统一的流来处理;
- 数值会跳过空格和换行符,但字符输入不会。假设有以下代码:
int score;
char grade;
printf(“Enter the score.\n”);
scanf("%s",&score);
printf(“Enter the letter grade.\n”);
grade = getchar();
编程练习题
8.1 设计一个程序,统计在读到文件结尾之前读取的字符数。
#include <stdio.h>
int main(void)
//这个程序以EOF为程序输入终止条件,但只有在输入Enter后继续输入Ctrl+Z程序才会输出结果
//目前我无法解释原因,我想的是getchar()读到^z就应该输出结果,但是并没有
{
int ch;
int ct;
while ((ch = getchar()) != EOF)
ct++;
printf("%d characters are read.\n", ct) ;
return 0;
}
8.2 编写一个程序,在遇到EOF之前,把输入作为字符流读取。程序要打印每个输入的字符及其相应的ASCII十进制。注意,在ASCII序列中,空格字符前面的字符都是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分别打印\n或\t。否则,使用控制祖父表示法。例如,ASCII的1是Ctrl+A,可显示为^A。注意A的ASCII值是Ctrl+A的值加上64.其他非打印字符也有类似的官司。除每次遇到换行符打印新的一行之外每行打印10对值。(注意:不同的操作系统其控制字符可能不同。)
#include <stdio.h>
int main(void)
//这题没理解,代码搬运的,懵逼!
{
char ch;
int i;
for(i=1; (ch=getchar()) != EOF; i++)
{
if (ch >= ' ' || ch == '\n' || ch == '\t')
printf("%-5c