在c语言中,出现了scanf不能读入的情况怎么半?
在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



