CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

while函数中的getchar()函数出现新问题之三!(linux版),请教!

楼主bjtoto(toto)2002-05-11 21:08:07 在 C/C++ / C语言 提问

各位前辈周末好,小弟的又碰见了新问题,这回是给运行环境有关的,请看代码:  
   
  struct   data_structure  
  {  
      int   p;  
      int   q;  
  };  
   
  typedef   struct   data_structure   ds;  
   
  ds*   get_input(ds*   a,int   num)  
  {  
      int   n   =   0,j;  
      char   p1,q1;  
   
      if(a==NULL)  
            return   -1;  
   
      memset(a,   0,   sizeof(ds)*num);  
   
      printf("Please   input   the   %d   group   data   ",num);  
      printf("(input   'x'   to   exit!).\n");  
      while(n<num)    
      {  
          printf("p   =   ");  
          fflush(stdin);  
          p1   =   getchar();   //   请注意这里的getchar函数  
          if((p1=='X')||(p1=='x'))  
              break;  
          if(isdigit(p1))  
                a[n].p   =   p1-0x30;  
   
          printf("q   =   ");  
          fflush(stdin);  
          q1   =   getchar();   //   请注意这里的getchar函数  
          if((q1=='X')||(q1=='x'))  
              break;  
          if(isdigit(q1))  
                a[n].q   =   q1-0x30;  
   
          n++;  
      };      
      return   a;  
  };  
   
  本人想让每次输入的数分别放入一个结构数组中的p,q里去,在windows下的VC调试和运行现在都很正确,可一旦我将该程序移到linux环境下的时候,运行结果就不对了。  
  在windows下,程序中的两个getchar函数都正确地执行了,但到了linux下,用gcc编译以后,程序每次执行循环时确显示以下语句:  
   
  p   =   q   =_    
   
  这也就是说其中有一个getchar函数没有执行。我认为可能还是跟getchar函数和缓冲区有关,但小弟实在对linux系统不熟,请指教! 问题点数:100、回复次数:1Top

1 楼Francky(寒星)回复于 2002-05-11 22:27:16 得分 100

#include   <stdio.h>  
  #include   <unistd.h>  
  #include   <fcntl.h>  
   
  main()  
  {  
      char   c;  
      int   iflg;  
      FILE   *fp;  
   
      if(   (fp=fopen("test.out","w"))==NULL)  
      {  
          perror("fopen   FATAL");  
          exit(0);  
      }  
   
      printf("fileno(stdin)=%d\n",fileno(stdin));  
   
      iflg   =   fcntl(fileno(stdin),F_GETFL,0);  
      if(iflg   ==   -1)  
      {  
            perror("fcntl(F_GETFL)   FATAL");  
      }  
   
      if(fcntl(fileno(stdin),F_SETFL,iflg|O_NONBLOCK)==-1)  
      {  
            perror("fcntl(F_SETFL)   FATAL");  
      }  
   
      printf("hello");  
      c=getchar();  
      printf("%c\n",c);  
  }  
   
  看看这段代码吧。  
  Top

相关问题

  • Linux下某些字符串操作函数没有对应的Unicode版本,有替代函数可用吗?
  • Linux下clone函数问题
  • Linux下的函数库
  • while函数中的getchar()函数出现新问题,请教!
  • 请教:关于getchar()和putchar()函数
  • 如何在Linux下使用GotoXY函数?
  • 请教LINUX 中 服务端 accept 函数
  • Linux 的C函数库放在哪儿?
  • linux下有没有清屏函数?
  • linux 下write()函数和大家探讨。。。

关键词

  • ds
  • iflg
  • fileno
  • fcntl
  • stdin
  • perror
  • fatal
  • printf
  • num
  • input

得分解答快速导航

  • 帖主:bjtoto
  • Francky

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo