// c_chapt13_1.cpp : Defines the entry point for the console application.
//编写程序,从标准输入读取一些字符,并根据分类计算各类字符所占的百分比
//禁止使用一系列if或者switch语句
#include "stdafx.h"
#include <cstdio>
#include <cctype>
int is_not_print(int ch)
{
return !isprint(ch);
}
int _tmain(int argc, _TCHAR* argv[])
{
//声明函数指针
int (*classity_char[])(int)={
iscntrl,//判断控制字符
isspace,
isdigit,
islower,
isupper,
ispunct,
is_not_print
};
//声明各种字母名称数组
char *name_of_chars[]={
"control",
"whitespace",
"digit",
"lower case",
"upper case",
"punctuation",
"non printable"
};
//声明各种字母数量数组
//int numbers_of_chars=(sizeof(classity_char)/sizeof(classity_char[0]));
const int numbers_of_chars=(sizeof(classity_char)/sizeof(classity_char[0]));
//#define numbers_of_chars ( sizeof( classity_char )/sizeof( classity_char[0] ) )
static int numbers[ numbers_of_chars ];
int total=0;
char ch;
//输入字母并判断
while ( (ch=getchar())!=EOF )
{
total+=1;
for(int i=0;i<numbers_of_chars;++i)
{
if ( classity_char[i]( ch ) )
numbers[i]+=1;
}
}
//输出结果
if (0==total)
{
printf("There is no print.");
}
else
{
for (int i=0;i<numbers_of_chars;++i)
{
printf("%f%% %s characters\n",numbers[i]*100.0/total,name_of_chars[i]);
}
}
printf("\n\n\nThank you!!!");
return 0;
}
错误1:
int is_not_print(int ch)
{
return !isprint(ch);
}
写成
int is_not_print(int)
{
return !isprint(int);
}
Error2 error C2660: 'isprint' : function does not take 0 argumentsd:\我的c++\练习\c_chapt13_1\c_chapt13_1\c_chapt13_1.cpp11