CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

在c语言中,出现了scanf不能读入的情况怎么半?

楼主luuyongjian(永建)2003-09-04 11:54:11 在 C/C++ / C语言 提问

在c语言中,出现了scanf不能读入的情况怎么半?  
  ...........  
  scanf("%c",&ch);  
    m=0;  
    while(ch!='\n')  
  {  
      shuzu[m]=ch;  
      m++;  
      scanf("%c",&ch);}  
  ..................  
  /**********************/  
  有人回了:  
  你输入的时候,同时也要输入一个回车。TC下,只把你开始输入的那个字符读进去了。回车就放在输入缓冲里。在你下一次读的时候,scanf先读入那个回车,再下一次才读你输入的字符。也算是TC一个BUG吧。  
  解决的方法也有。  
  fflush(   stdin   );     //   清空输入缓冲  
  或者  
  getc();  
  把回车读进去,扔掉。  
   
   
  但是还是不行,请问fflush(   stdin   )这个函数的stdin这个参数是固定的还是要根据程序具体来写,如果是这样的话,该怎么写?  
  问题点数:0、回复次数:5Top

1 楼bankhank(寻找目标)回复于 2003-09-04 12:09:16 得分 0

只要在你的scanf()下+一句getchar();  
  就行了Top

2 楼ppm07(浩浩白水)回复于 2003-09-04 12:11:34 得分 0

格式是这样的:  
  int   fflush(    
        FILE   *stream    
  );  
  fflush(   stdin   )是刷新输入流,还可以刷新输出流,甚至还可以这样用fflush(   NULL   );表示刷新所有的输入输出流。  
  Top

3 楼cateva(唐唐)回复于 2003-09-04 12:16:27 得分 0

同意bankhank的做法,我以前在LINUX就遇到过这个问题,但在VC++就没有问题,这种解决办法是很简单的,而且也好使.Top

4 楼atlcat(猫咪饲养员)回复于 2003-09-04 12:19:37 得分 0

#include   <stdio.h>  
   
  void   main()  
  {  
  char   ch,shuzu[100];  
  int   m;  
  scanf("   %c",&ch);  
  m=0;  
  while(ch!='\n')  
  {  
  shuzu[m]=ch;  
  m++;  
  scanf("   %c",&ch);  
  }  
  }  
   
  在%c前面加个空格就可以了,至于这个程序是个死循环,楼主自己解决咯Top

5 楼luuyongjian(永建)回复于 2003-09-04 12:30:46 得分 0

这个程序是   huffman编码,以下只是其中一部分,就出现了上面的问题,请各位大侠帮忙呀!  
  #define   NULL   0  
  #define   MAX   100  
  #include<stdio.h>  
   
  struct   node{  
            char   data;  
            int   weight;  
            int   parent;  
            int   left;  
            int   right;  
            }huffnode;  
  struct   hunode{  
          char   cd[100];  
          int   start;  
  }huffcode;  
  struct   aa{  
            char   name;  
              int   s;  
              struct   aa   *next;  
  };  
   
  int   n;  
  struct   aa   *tongji()  
  {  
      int   i;  
      char   ch;  
      struct   aa   *head,*p,*p1,*p2;  
      n=0;  
      printf("please   input   the   chars   end   of   ctrl   'z':\n");  
      head=NULL;  
      while((ch=getchar())!=EOF){  
      p=(struct   aa   *)malloc(sizeof(struct   aa));  
      p->name=ch;  
      n++;  
      p->s=1;  
      if(n==1){  
      head=p;  
      p1=p;         }  
      else   p1->next=p;  
      p1=p;  
      }  
      p1->next=NULL;  
      return(head);  
      }  
      struct   aa   *f1()  
      {struct   aa   *head,*p1,*p,*p2;  
        int   i;  
      head=tongji();  
      p=p1=head;  
      while(p1!=NULL){  
   
      p=p1->next;  
      p2=p1;  
      for(i=1;p!=NULL;i++){  
      if(p1->name==p->name){  
      p1->s++;  
      p2->next=p->next;  
      p=p2->next;  
   
      n--;}  
  else   {   p=p->next;  
      p2=p2->next;}  
   
      }  
      p1=p1->next;}  
      for(p1=head;p1!=NULL;){  
      printf("%c,%d\n",p1->name,p1->s);  
      p1=p1->next;}  
      printf("n=%d\n",n);  
      return(head);  
   
   
  }  
  main()  
  {  
    char   shuzu[MAX],ch;  
    struct   node   ht[200];  
    struct   hunode   hcd[100],d;  
    struct   aa   *p;  
    int   flag,i,k,f,l,r,c,m,m1,m2;  
   
  flag=1;  
    m=0;  
  p=f1();  
  for(i=1;i<=n;i++)  
  {   ht[i].data=p->name;  
      ht[i].weight=p->s;  
      p=p->next;  
   
  }  
    free(p);  
  for(i=1;i<=2*n-1;i++)  
  ht[i].parent=ht[i].left=ht[i].right=0;  
  for(i=n+1;i<=2*n-1;i++)  
  {m1=m2=32767;  
  l=r=0;  
  for(k=1;k<=i-1;k++)  
  if(ht[k].parent==0)  
  if(ht[k].weight<m1)  
  {  
  m2=m1;  
  r=l;  
  m1=ht[k].weight;  
  l=k;  
  }  
  else   if(ht[k].weight<m2)  
        {m2=ht[k].weight;  
              r=k;  
        }  
      ht[l].parent=i;  
      ht[r].parent=i;  
      ht[i].weight=ht[l].weight+ht[r].weight;  
      ht[i].left=l;  
      ht[i].right=r;  
      }  
  for(i=1;i<=n;i++)  
  {  
        d.start=n+1;  
        c=i;  
        f=ht[i].parent;  
        while(f!=0)  
          {  
                if(ht[f].left==c)  
    d.cd[--d.start]='0';  
                else  
    d.cd[--d.start]='1';  
                c=f;  
                f=ht[f].parent;  
          }  
          hcd[i]=d;  
    }  
  printf("output   huffman   codes:\n");  
  for(i=1;i<=n;i++)  
      {     printf("%c:",ht[i].data);  
            for(k=hcd[i].start;k<=n;k++)  
            printf("%c",hcd[i].cd[k]);  
            printf("\n");  
        }  
   
    printf("input   the   '0'   and   '1':");  
   
    scanf("   %c",&ch);  
   
   
    m=0;  
    while(ch!='\n')  
  {  
      shuzu[m]=ch;  
      m++;  
      scanf("   %c",&ch);}  
   
  for(i=1;i<=m;i++)  
    printf("%c\n",shuzu[i]);  
   
        }  
   
  Top

相关问题

  • C语言的整行读入
  • C语言中如何按行读入字符?
  • 简单 如何用C语言读入.txt文件
  • 急:在C语言中读取文件时是整个读入内存吗?
  • C语言中如何读入未知二维数组的行数和列数?
  • 关于C语言scanf中用%c和%s的问题啊!!!
  • 在C#中如何读入汉字串?
  • c语言中的scanf输入语句的问题
  • 请问为什么C语言的scanf,printf比C++的cin,cout快
  • 在汇编语言中如何读入外部运行参数?

关键词

  • 解决
  • null
  • 读入
  • shuzu
  • scanf
  • fflush
  • 回车
  • 输入
  • ch
  • struct aa

得分解答快速导航

  • 帖主:luuyongjian

相关链接

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

广告也精彩

反馈

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