主题:从“void*”到指向非“void”的指针的转换要求显式类型转换
[code=c]
#include<stdio.h>
#include<malloc.h>
#include<string.h>
void e();
void f();
void t();
void t1();
void e1();
struct Lchar
{
char char_ch;
struct Lchar *next;
}Lchar,*p,*h,*temp;
char ch;
int right;
void e(void)
{
t();
e1();
}
void t(void)
{
f();
t1();
}
void t1(void)
{
if(h->char_ch=='*')
{
h=h->next;
f();
t1();
}
else
if(h->char_ch!='#'&&h->char_ch!=')'&&h->char_ch!='+')
right=0;
}
void e1(void)
{
if(h->char_ch=='+')
{
h=h->next;
t();
e1();
}
else
if(h->char_ch=='#'||h->char_ch==')')
return;
else
right=0;
}
void f()
{
if(h->char_ch=='i')
h=h->next;
else
if(h->char_ch=='(')
{
h=h->next;
e();
if(h->char_ch==')')
h=h->next;
else
right=0;
}
else
right=0;
}
void main(void)
{
right=1;
h=malloc(sizeof(Lchar));//动态生成临时存储空间..
h->next=NULL;//空指针
p=h;//p指向指针h的空间
printf("请输入需语法分析的式子,并以‘#’号结束:\n");
do
{
ch=getchar();//读入字符
// putchar(ch);//输出字符,yuanyoud
if(ch=='i'||ch=='+'||ch=='*'||ch=='('||ch==')'||ch=='#')
{
temp=malloc(sizeof(Lchar));//创建新空间
temp->next=NULL;
temp->char_ch=ch;//指针指向新读入的字符
h->next=temp;//h指向temp的空间
h=h->next;//指针后移
}
else
{
temp=p->next;
printf("\nInput a wrong char!\n Input again:\n");
for(;;)
{
if (temp!=NULL)
printf("%c",temp->char_ch); //输出不符合项后边所有的项
else
break;
temp=temp->next;
}
}
}while(ch!='#');
p=p->next;
h=p;
e();
if(h->char_ch=='#'&&right)
printf("\nOK!\n");
else
printf("\nError!\n");
getchar();
}
[/code]
#include<stdio.h>
#include<malloc.h>
#include<string.h>
void e();
void f();
void t();
void t1();
void e1();
struct Lchar
{
char char_ch;
struct Lchar *next;
}Lchar,*p,*h,*temp;
char ch;
int right;
void e(void)
{
t();
e1();
}
void t(void)
{
f();
t1();
}
void t1(void)
{
if(h->char_ch=='*')
{
h=h->next;
f();
t1();
}
else
if(h->char_ch!='#'&&h->char_ch!=')'&&h->char_ch!='+')
right=0;
}
void e1(void)
{
if(h->char_ch=='+')
{
h=h->next;
t();
e1();
}
else
if(h->char_ch=='#'||h->char_ch==')')
return;
else
right=0;
}
void f()
{
if(h->char_ch=='i')
h=h->next;
else
if(h->char_ch=='(')
{
h=h->next;
e();
if(h->char_ch==')')
h=h->next;
else
right=0;
}
else
right=0;
}
void main(void)
{
right=1;
h=malloc(sizeof(Lchar));//动态生成临时存储空间..
h->next=NULL;//空指针
p=h;//p指向指针h的空间
printf("请输入需语法分析的式子,并以‘#’号结束:\n");
do
{
ch=getchar();//读入字符
// putchar(ch);//输出字符,yuanyoud
if(ch=='i'||ch=='+'||ch=='*'||ch=='('||ch==')'||ch=='#')
{
temp=malloc(sizeof(Lchar));//创建新空间
temp->next=NULL;
temp->char_ch=ch;//指针指向新读入的字符
h->next=temp;//h指向temp的空间
h=h->next;//指针后移
}
else
{
temp=p->next;
printf("\nInput a wrong char!\n Input again:\n");
for(;;)
{
if (temp!=NULL)
printf("%c",temp->char_ch); //输出不符合项后边所有的项
else
break;
temp=temp->next;
}
}
}while(ch!='#');
p=p->next;
h=p;
e();
if(h->char_ch=='#'&&right)
printf("\nOK!\n");
else
printf("\nError!\n");
getchar();
}
[/code]