第八章
下面的一些程序要求输入以EOF终止。如果你的操作系统很难或根本无
法使用重定向,请使用一些其他的测试来终止输入,如读到&字符时停止。
1.
设计一个程序,统计在读到文件结尾之前读取的字符数。
#include <stdio.h>
int main(void){
int i = 0;
char ch;
printf("请输入需要统计的文章:\n");
while ((ch=getchar()!='#')) {
i++;
}
printf("文章的字符数为:%d",i);
}
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=0;
printf("请输入:");
while((ch=getchar())!=EOF)
{
switch(ch)
{
case '\n':
printf("\\n");
i++;
break;
case '\t':
printf("\\t");
i++;
break;
default:
putchar(ch);
printf("%d",ch);
i++;
break;
}
if(i==10)
{
printf("\n");
i=0;
}
}
}
//不太确定是不是正确理解要求了
3.
编写一个程序,在遇到 EOF 之前,把输入作为字符流读取。该程序要报告输入中的大写字母和小写字母的个数。假设大小写字母数值是连续的。或者使用ctype.h库中合适的分类函数更方便。
#include <stdio.h>
#include <ctype.h>
int main (void){
char ch;
int i=0,j=0;
printf("请输入要统计的字符流:\n");
ch=getchar();
while((ch=getchar())!='#'){
if (islower(ch)) {
i++;
}
else if (isupper(ch)){
j++;
}
}
printf("共有小写字母%d个,大写字母%d个/n",i,j);
}
4.
编写一个程序,在遇到EOF之前,把输入作为字符流读取。该程序要报告平均每个单词的字母数。不要把空白统计为单词的字母。实际上,标点符号也不应该统计,但是现在暂时不同考虑这么多(如果你比较在意这点, 考虑使用ctype.h系列中的ispunct()函数)。