c函数和指针练习

来源:互联网 发布:java运行class文件 编辑:程序博客网 时间:2024/04/29 02:51
#include <stdio.h>
#include<string.h>
#include<ctype.h>


char showmenu(void);
void eatline(void); //读至行末
void show(void(* fp)(char *), char * str);
void ToUpper(char *); //把字符串转换为大写
void ToLower(char *); //把字符串转为小写
void transpose(char *); //大小写转换
void Dummy(char *); //不改变字符串


int main(void) {
char line[81];
char copy[81];
char choice;
void(*pfun)(char *); //指向一个函数,该函数接受一个char * 参数,并且没有返回值

puts("enter a string(empty line to quit):");
while(gets(line) != NULL && line[0] != '\0')
{
while((choice = showmenu()) != 'n') {
switch(choice) 
{
case 'u':pfun = ToUpper;break;
case 'l':pfun = ToLower;break;
case 't':pfun = transpose;break;
case 'o':pfun = Dummy; break;
}
strcpy(copy, line); //为show()制作一份拷贝
show(pfun, copy);//使用用户选择的函数
}
puts("enter a string(empty line to quit):");
}
puts("bye!");
return 0;
}


char showmenu(void)
{
char ans;
puts("enter menu choice.");
puts("u)uppercase l)lowercase");
puts("t)transposed case o)original case");
puts("n)next string");
ans = getchar();
ans = tolower(ans);
eatline(); //剔除一行剩余部分
while(strchr("ulton", ans) == NULL) {
puts("please enter a u, l, t, o, or n:");
ans = tolower(getchar());
eatline();
}
return ans;
}


void eatline(void) {
while(getchar() != '\n')
continue;
}


void ToUpper(char * str)
{
while(*str)
{
*str = toupper(*str);
str++;
}
}


void ToLower(char * str) {
while(*str)
{
*str = tolower(*str);
str++;
}
}


void transpose(char * str) {
while(*str)
{
if(islower(*str)) 
*str = toupper(*str);
else if(isupper(*str))
*str = tolower(*str);
str++;

}
}


void Dummy(char * str) {
//don't change
}


void show(void(* fp)(char *), char * str) {
(*fp) (str);
puts(str);
}
0 0
原创粉丝点击