为什么输出两个啊?
先看源码:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(node)
#define NULL 0
typedef struct LNode
{
char data;
struct LNode * next;
}node;
node * createlist()
{
node *p = (node *)malloc(LEN), *head;
head = p;
printf("请输入字符串:");
scanf("%s", p->data);
head->next = NULL;
while(strcmp(p->data, "A"))
{
p = (node *)malloc(LEN);
printf("请输入字符串:");
gets(p->data);
p->next = head;
head = p;
}
head = p->next;
free(p);
return head;
}
void showlist(node * head)
{
node * p = head;
while(p != NULL)
{
printf("%s ", p->data);
p = p->next;
}
puts("\n");
}
void main()
{
node * head;
head = createlist();
showlist(head);
}再看结果:
请输入字符串:ZHAO
请输入字符串:请输入字符串:QIAN
请输入字符串:SUN
请输入字符串:LI
请输入字符串:ZHOU
请输入字符串:WU
请输入字符串:ZHENG
请输入字符串:WANG
请输入字符串:A
WANGZHENGWUZHOULISUNQIAN ZHAO
Press any key to continue
为什么QIAN之前会出现两个“请输入字符串”啊?
你这前插看起来好别扭啊
你要不就全用scanf 或者全用gets就不会出现这个问题了 gets是最低级的漏洞.. 紫炎 发表于 2012-2-26 09:05 static/image/common/back.gif
你这前插看起来好别扭啊
你要不就全用scanf 或者全用gets就不会出现这个问题了
这个我知道啊,可我就是不明白为什么这样就会有两个输出啊 ccqiji 发表于 2012-3-14 14:13 static/image/common/back.gif
gets是最低级的漏洞..
能说明白点吗?这个实在不太懂啊!大哥! 解决方法:请在26行:gets(p->data);前加一句:fflush(stdin);即可
原因说明:gets是从输入缓冲区获取数据,代码执行到19行时,会输入数据,之后导致输入缓冲区不为空,所以接下来使用gets函数时,该函数尝试从输入缓冲区获取数据,结果是成功获取到数据,故不会等待用户输入而继续循环,导致。。。 6楼说的基本正确,就是缓冲区的问题,导致你第一次进while循环的时候,gets函数默认有数据,而这个数据是第一次输入时候 的‘\n’回车,被gets接收了,所以会略过gets函数的输入,而进行下一次循环,也就是输出了两次那个 “请输入字符串”
还有一个问题,就是楼主你应该要学会设置break断点,通过调试来发现,各个变量的变化,进而发现错误,因为这种错误完全有能力自己调试出来。 路过,努力学习!
页:
[1]