繁体   English   中英

使用ncurses打印输出链接列表结构时需要的建议

[英]Suggestion Required in printing the output linklist structure using ncurses

我创建了一个LinkList,如下所示:

vId       msisdn         ivrCode   state     DTMF

9         4321           120005    Talking   #
3         0000           564765    Standby   *
33        1234           120005    Ringing   *
12        1234           1223465   Ringing   3
223       9995373        9995      Pending   4
2         435373         3465      Pending   2

此处的每一行都是链接列表的一个节点,其中的元素显示为列。

现在在我的程序中,我使用ncurses的mvscanw函数输入字符串,并将其传递给函数。
此函数将所有列表节点的字符串与链接列表的ivrCode元素进行比较。
如果找到匹配项,则使用ncurses的mvpritnw()打印具有该ivrcode的列表。
如果找不到,它将返回。
现在我通过3465并按Enter键:
因此,应将输出显示为:

vId       msisdn         ivrCode   state     DTMF

2         435373         3465      Pending   2

但这没有发生:

这是代码片段:

  void display1(char *r)
 {
char * status;
int   thisDTMF;
char * code;

struct linklist * curser=listhead;
int count;
mvprintw (2,0, "%s","vId");
mvprintw (2,10, "%s","msisdn" );
mvprintw (2,25, "%s","ivrCode" );
mvprintw (2,35, "%s","state" );
mvprintw (2,45, "%s","DTMF" );
count = 4;
while(curser!=NULL)
{ status=getState(curser->state);
  thisDTMF=getDTMF(curser->dtmf);
  code=curser->ivrCode;
  if((code==r)||(status==r))
  { mvprintw (0,0,"%s","m here");
  mvprintw (count,0,"%d",curser->vId);
  mvprintw (count,10,"%s",curser->msisdn);
  mvprintw (count,25, "%s",curser->ivrCode );
  mvprintw (count,35, "%s",status );
  if(thisDTMF==35||thisDTMF==42)
      mvprintw (count,45, "%c",thisDTMF );
  else
  mvprintw (count,45, "%d",thisDTMF );
  count++;
  }
/*else
{mvprintw (3,0, "%s","kuch ni mila" );} */
 curser=curser->next;
}

}


  void rcvChar(char c)
{ char a;
  char *str;
  char *rts=(char*)malloc(4*sizeof(char));

  switch(c)
  { case 'i':   
mvprintw (1,0, "%s","ivrcode:");
mvscanw(1,8,"%s",rts);
mvprintw (1,8, "%s",rts);
//printf("got in rcvchar");
initDisplay();
display1(rts);
dis();
break;
  case 's':
mvprintw (1,0, "%s","state change to ( r,t,p,s) ");
a=getch();
initDisplay();
switch(a)
{case 'r':
    str="Ringing";
    display1(str);
    break;
 case 't':
    str="Talking";
    display1(str);
    break;
 case 'p':
    str="Pending";
    display1(str);
    break;
 case 's':
    str="Standby";
    display1(str);
    break;
 default:
    mvprintw (1,0, "%s","unacceptable State");
    display();
    break;
}
dis();
break;
   }

这样就可以按状态打印行。 我猜问题是键盘输入的字符串与ivrCode /代码不匹配。

有什么建议吗?

rstatuscodechar * ,但是您正在使用进行测试

  if((code==r)||(status==r))

尝试改用strcmp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM