目录
1.putchar(getchar())是一个有效表达式,它实现什么功能?getchar(putchar())是否也是有效表达式
3.假设有一个名为 count 的可执行程序,用于统计输入的字符数。设计一个使用 count 程序统计essay文件中字符数的命令行,并把统计结果保存在essayct文件中
6.对于给定的输出(ch是int类型,而且是缓冲输入),下面各程序段的输出分别是什么?
while ((ch = getchar()) != 'i')
while ((ch = getchar()) != '\n')
8.在使用缓冲输入的系统中,把数值和字符混合输入会遇到什么潜在的问题
2.编写一个程序,在遇到 EOF 之前,把输入作为字符流读取。程序要打印每个输入的字符及其相应的ASCII十进制值。
3.编写一个程序,在遇到 EOF 之前,把输入作为字符流读取。该程序要报告输入中的大写字母和小写字母的个数。假设大小写字母数值是连续的。或者使用ctype.h库中合适的分类函数更方便
6.修改程序清单8.8中的get_first()函数,让该函数返回读取的第1个非空白字符,并在一个简单的程序中测试
7.修改第7章的编程练习8,用字符代替数字标记菜单的选项。用q代替5作为结束输入的标记
Enter the operation of your choice:
Please enter a number, such as 2.5, -1.78E8, or 3: 1
复习题
1.putchar(getchar())是一个有效表达式,它实现什么功能?getchar(putchar())是否也是有效表达式
- 实现输出显示缓存区的下一个字符
- 不是
2.下面的语句分别完成什么任务?
a.putchar('H');
b.putchar('\007');
c.putchar('\n');
d.putchar('\b');
a. 打印字符 H
b. 如果系统使用ASDII,发出一声警报
c. 把光标移动到下一行
d. 把光标后退一格
3.假设有一个名为 count 的可执行程序,用于统计输入的字符数。设计一个使用 count 程序统计essay文件中字符数的命令行,并把统计结果保存在essayct文件中
count < essay > essayct or count > essayct < essay
4.给定复习题3中的程序和文件,下面哪一条是有效的命令?
a.essayct <essay
b.count essay
c.essay >count
都不是
5.EOF是什么
由getchar() or scanf() 返回的特殊的值,表明函数检测到文件的结尾
6.对于给定的输出(ch是int类型,而且是缓冲输入),下面各程序段的输出分别是什么?
a.输入如下:
If you quit, I will.[enter]
程序段如下:
while ((ch = getchar()) != 'i')
putchar(ch);
b.输入如下:
Harhar[enter]
程序段如下:
while ((ch = getchar()) != '\n')
{
putchar(ch++);
putchar(++ch);
}
a. If you qu
b.HJacrthjacrt
7.C如何处理不同计算机系统中的不同文件和换行约定
C的标准I/O库会把不同的文件映射成统一的流来处理
8.在使用缓冲输入的系统中,把数值和字符混合输入会遇到什么潜在的问题
数字会跳过空格和换行符,但是字符输入不会:
输入数字的时候,空格和换行符还会留在缓存区,输入字符的时候会读取。
【在输入数字之后要处理空格和换行符】
编程练习
1.设计一个程序,统计在读到文件结尾之前读取的字符数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE* in;
in = fopen("123.txt", "r");
char ch;
long n = 0;
while((ch = getc(in)) != EOF)
{
n++;
}
fclose(in);
printf("%ld\n", n);
return 0;
}
2.编写一个程序,在遇到 EOF 之前,把输入作为字符流读取。程序要打印每个输入的字符及其相应的ASCII十进制值。
注意,在ASCII序列中,空格字符前面的字符都是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分别打印\n或\t。否则,使用控制字符表示法。例如,ASCII的1是Ctrl+A,可显示为^A。注意,A的ASCII值是Ctrl+A的值加上64。其他非打印字符也有类似的关系。除每次遇到换行符打印新的一行之外,每行打印10对值。
(注意:不同的操作系统其控制字符可能不同。)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE* in;
in = fopen("123.txt", "r");
char ch;
int n = 0;
while((ch = getc(in)) != EOF)
{
if(ch == '\n')
{
putchar('\\');
putchar('n');
printf("%d\n", ch);
n = 0;
}
else if(ch == '\t')
{
putchar('\\');
putchar('t');
printf("%d ", ch);
}
else if(ch < ' ')
{
putchar('^');
putchar(ch + 64);
printf("%d ", ch);
}
else
{
putchar(ch);
printf("%d ", ch);
}
if(++n % 10 == 0)
{
n = 0;
putchar('\n');
}
}
fclose(in);
return 0;
}
3.编写一个程序,在遇到 EOF 之前,把输入作为字符流读取。该程序要报告输入中的大写字母和小写字母的个数。假设大小写字母数值是连续的。或者使用ctype.h库中合适的分类函数更方便
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
i