读书人

请问关于C primer puls的一道课后题

发布时间: 2013-02-02 12:27:16 作者: rapoo

请教关于C primer puls的一道课后题
第八章的一道课后题,把输入作为字符流读取,直到遇到EOF,令程序打印每个字符及其ASCII码,非打印字符换行符和制表符打印为\n,\t,其他打印为如ctrl+A打印为^A的形式,每行打印十对值。
我的程序是这样的,我在ouput函数中有加一个计数器,每当打印一对值,计数器加一,若为十,打印换行符,可是没有起到作用,请问是错在哪里了?另外,这段程序不足的地方还请帮忙指出,谢谢了
#include<stdio.h>
#include<ctype.h>
void output(int ch);
int main(void)
{
int ch;

printf("请输入字符!\n");
while((ch=getchar())!=EOF) //检测到EOF即跳出循环
output(ch);
getch();
return 0;
}
void output(int ch)
{
int i=0;

if(isspace(ch)) //处理非打印字符
{
switch(ch)
{
case '\n':
printf("\\n:%d ",ch);
i++;
break;
case '\t':
printf("\\t:%d ",ch);
i++;
break;
case ' ':
printf("SPACE:%d ",ch);
i++;
break;
}
}
else if(isupper(ch+64)&&ch<' ')
{
printf("^%c:%d ",ch+64,ch);
i++;
}
else
{
printf("%c:%d ",ch,ch);
i++;
}
if(i==10)
{
i=0;
printf("\n");
}
}

[解决办法]
在output函数内的i声名前加static
static int i = 0;
[解决办法]

引用:
在output函数内的i声名前加static
static int i = 0;

++
不定义为static,每次进入的时候,都会重置i为0

读书人网 >C语言

热点推荐