鱼C论坛

 找回密码
 立即注册
查看: 4670|回复: 7

为什么输出两个啊?

[复制链接]
发表于 2012-2-23 09:56:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
先看源码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define LEN sizeof(node)
#define NULL 0 

typedef struct LNode
{
  char data[6];
  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
WANG  ZHENG  WU  ZHOU  LI  SUN  QIAN    ZHAO
Press any key to continue
为什么QIAN之前会出现两个“请输入字符串”啊?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-26 09:05:56 | 显示全部楼层
你这前插看起来好别扭啊  
你要不就全用scanf 或者全用gets就不会出现这个问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-14 14:13:36 | 显示全部楼层
gets是最低级的漏洞..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-4-17 05:08:53 | 显示全部楼层

这个我知道啊,可我就是不明白为什么这样就会有两个输出啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-4-17 05:09:49 | 显示全部楼层
ccqiji 发表于 2012-3-14 14:13
gets是最低级的漏洞..

能说明白点吗?这个实在不太懂啊!大哥!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-4-20 08:56:28 | 显示全部楼层
解决方法:请在26行:gets(p->data);前加一句:fflush(stdin);即可
原因说明:gets是从输入缓冲区获取数据,代码执行到19行时,会输入数据,之后导致输入缓冲区不为空,所以接下来使用gets函数时,该函数尝试从输入缓冲区获取数据,结果是成功获取到数据,故不会等待用户输入而继续循环,导致。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-4-21 09:56:13 | 显示全部楼层
6楼说的基本正确,就是缓冲区的问题,导致你第一次进while循环的时候,gets函数默认有数据,而这个数据是第一次输入时候 的‘\n’回车,被gets接收了,所以会略过gets函数的输入,而进行下一次循环,也就是输出了两次那个 “请输入字符串”

还有一个问题,就是楼主你应该要学会设置break断点,通过调试来发现,各个变量的变化,进而发现错误,因为这种错误完全有能力自己调试出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2016-2-5 13:49:43 | 显示全部楼层
路过,努力学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 13:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表