首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于链表中,使用格式化输入的有关问题,高手帮解决下,感激

2012-02-12 
关于链表中,使用格式化输入的问题,高手帮解决下,感激!鄙人是新手,问题或许幼稚,请不要耻笑。。。。问题描述:最

关于链表中,使用格式化输入的问题,高手帮解决下,感激!
鄙人是新手,问题或许幼稚,请不要耻笑。。。。
问题描述:最近用C语言写一个链表,出现了一个奇怪的问题,当假设链表只有一个头结点,且不存任何数据,我在插入两个结点放在头结点后,当我对结点数据进行初始化的时候,只有第一个结点可以,第二个结点写不进去值。具体输入函数如下:
int   indata(CLIST   *head)//CLIST为一个结构提,存放一个char和int数据
{
int   i;
CLIST   *p   =   NULL;
p   =   head-> next;
printf( "input   numbers: ");
while(p   !=   NULL)
{
scanf( "%c,%d ",&p-> name,&p-> num);//问题在这句,如果把c%换成%d问题就不存在了,或者把name声明为数组也可以解决问题
if(p-> next   ==   NULL)
break;
p   =   p-> next;
}
return   SUCCESS;
}
/*结构提定义如下*/
typedef   struct   clist  
{
char   name;
int   num;
struct   clist   *next;
}CLIST;
此链表的连接绝对没有问题,我测试过N次了。。
请教各位,为什么在这里会出问题,如何解决,感激不尽~~~


[解决办法]
scanf( "%c,%d ",&p-> name,&p-> num);//问题在这句,如果把c%换成%d问题就不存在了,或者把name声明为数组也可以解决问题
------------------------------------
这个问题我以前也遇到过。

不过千万不要用在scanf( "%c,%d ",&p-> name,&p-> num)加 fflush(stdin)这种方法,c99里面只规定了fflush(stdout)这种方法,虽然你在VC下编译用fflush(stdin)也可以解决问题,但是你这个程序放到gcc上就要出错,因为它不知道fflush(stdin)是什么东东,因为c99标准里面根本就没有fflush(stdin)。fflush(stdin)只是在一些编译器下被默认了。而在支持c99的编译器里就会出错。
在这有两个解决方法:
第一:在scanf( "%c,%d ",&p-> name,&p-> num)前面加一个getchar();用来吃掉多余的那个字符(一般是回车符号)。
第二:在scanf( "%c,%d ",&p-> name,&p-> num)前加一个循环语句,
while (getchar () != '\n ')
{
; // 注意这有一个分好
}
作用是吃掉多余的所有字符。

热点排行