- 论坛徽章:
- 0
|
#include <stdlib.h>;
#include <stdio.h>;
struct myStruct
{ char *Data;
int score;
struct myStruct *Next;
};
struct myStruct *Prn()
{
struct myStruct *myNode,*List,*PNode;
char *iA;
int i,iScore;
List=NULL; PNode=NULL;
for (i=0;i<10;i++)
{
iScore=i+3;
if ((iScore%2)==0) iA="HHH";
else iA="WWW";
myNode=(struct myStruct *)malloc(sizeof(struct myStruct));
myNode->;Data=iA;
myNode->;score=iScore;
myNode->;Next=NULL;
if (List!=NULL) List->;Next=myNode;
List=myNode;
if (PNode==NULL) PNode=List;
printf("\n" ;
printf("%s \t %d",List->;Data,List->;score);
}
printf("\n" ;
return PNode;
};
void main()
{ struct myStruct *PN;
PN=Prn();
while (PN!=NULL)
{ printf("\n %s \t %d",PN->;Data,PN->;score);
PN=PN->;Next;
}
getch();
};
上面代码输出结果如我所愿,但下面的Pro*C代码的输出结果非我所愿:
#include <stdlib.h>;
#include <stdio.h>;
#include "e:\oracle\ora81\precomp\public\sqlca.h"
struct RoadInfo
{
int RoadNo;
char *RoadName;
struct RoadInfo *Next;
};
void error_proc();
void ConnectDB(char *uname,char *dname)
{ EXEC SQL CONNECT :uname USING :dname;}
void DisconnectDB()
{ EXEC SQL COMMIT WORK RELEASE;}
struct RoadInfo *RoadList()
{
char uname[] = "westnetwork/westnetwork";
char dname[] = "YX";
EXEC SQL BEGIN DECLARE SECTION;
struct RoadInfo *RNode,*RList,*PR;
char RoadName[20];
int RoadNo;
EXEC SQL END DECLARE SECTION;
RList=NULL; PR=NULL;
//异常
EXEC SQL WHENEVER SQLERROR DO error_proc();
//连接
ConnectDB(uname,dname);
EXEC SQL DECLARE c1 CURSOR FOR
SELECT DISTINCT ROADNO,ROADNAME FROM ROAD;
EXEC SQL OPEN c1;
do
{
EXEC SQL FETCH c1 INTO :RoadNo,:RoadName;
if (sqlca.sqlcode==1403) break;
RNode=(struct RoadInfo *)malloc(sizeof(struct RoadInfo));
RNode->;RoadNo=RoadNo;
RNode->;RoadName=RoadName;
RNode->;Next=NULL;
if (RList!=NULL) RList->;Next=RNode;
RList=RNode;
if (PR==NULL) PR=RList;
printf("\n 路段编码:%-20d 路段名称: %-20s\n",RList->;RoadNo,RList->;RoadName);
}while (1);
EXEC SQL CLOSE c1;
printf("\n\n按任意键继续" ;
getch();
//提交并释放连接
DisconnectDB();
return PR;
}
void main()
{
struct RoadInfo *PRd;
PRd=RoadList();
while (PRd!=NULL)
{
printf("\n" ;
printf("%d",PRd->;RoadNo);
printf("\t" ;
printf("%s",PRd->;RoadName);
PRd=PRd->;Next;
}
}
void error_proc()
{
printf("\n%.*s!",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
exit(-1);
}
在main中printf("%s",PRd->;RoadName)输出的结果(非我所愿)与RoadList函数中输出的RList->;RoadName的值不符。怎么回事? |
|