| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 425 人关注过本帖
标题:为什么第一个name不能输入?
只看楼主 加入收藏
summoner
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1622
专家分:0
注 册:2005-3-3
收藏
 问题点数:0 回复次数:3 
为什么第一个name不能输入?

运行后第一个name不能输入数据(直接跳过了),还有输出的结果也不对(number>2)时
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(struct linkinfo)

struct linkinfo
{
char name[20];
char place[128];
char birthday[10];
char telephone[16];
struct linkinfo *next;
};

struct linkinfo *create(int number)
{
struct linkinfo *new,*head = NULL,*tail = NULL;
int i,count = 0;
for(i=0; i<number; i++)
{
new = (struct linkinfo *)malloc(LEN);
printf("name:");
gets(new->name); //改为scanf("%s",new->name);就行,但是scanf不能输入空格和空数据
printf("\n%s",new->name);
printf("place:");
scanf("%s",new->place);
printf("birthday:");
scanf("%s",new->birthday);
printf("tel:");
scanf("%s",new->telephone);
count++;
new->next = NULL;
if(count <= 1)
{
head = new;
}
else
{
tail->next = new;
}
tail = new;
}
return (head);
}

main()
{
struct linkinfo *p_main;
int i,number;
printf("number:");
scanf("%d",&number);
p_main = create(number);
for(i=0; i<number; i++,p_main = p_main->next)
{
printf("%s\n",p_main->name);
printf("%s\n",p_main->place);
printf("%s\n",p_main->birthday);
printf("%s\n",p_main->telephone);
}
}


[此贴子已经被作者于2007-2-8 12:54:18编辑过]

搜索更多相关主题的帖子: name 输入 
2007-02-08 10:11
mzjllh
Rank: 2
来 自:江苏扬州
等 级:论坛游民
帖 子:76
专家分:41
注 册:2007-2-8
收藏
得分:0 

在gets(new->)前的printf("name:");的上面加一句:fflush(stdin);即可,该句将标准输入缓冲区清除,运行通过,修改后代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(struct linkinfo)

struct linkinfo
{
char name[20];
char place[128];
char birthday[10];
char telephone[16];
struct linkinfo *next;
};

struct linkinfo *create(int number)
{
struct linkinfo *new,*head = NULL,*tail = NULL;
int i,count = 0;
for(i=0; i<number; i++)
{
new = (struct linkinfo *)malloc(LEN);
fflush(stdin);
printf("name:");
gets(new->name);
printf("place:");
scanf("%s",new->place);
printf("birthday:");
scanf("%s",new->birthday);
printf("tel:");
scanf("%s",new->telephone);
count++;
new->next = NULL;
if(count <= 1)
{
head = new;
}
else
{
tail->next = new;
}
tail = new;
}
return (head);
}

main()
{
struct linkinfo *p_main;
int i,number;
printf("number:");
scanf("%d",&number);
p_main = create(number);
for(i=0; i<number; i++,p_main = p_main->next)
{
printf("Name:%s\n",p_main->name);
printf("Place:%s\n",p_main->place);
printf("Birthday:%s\n",p_main->birthday);
printf("Tel:%s\n",p_main->telephone);
}
while(!kbhit());
return 0;
}
另外再说一句,假设你的程序中第一个NUMBER输入为非数字时可能出现问题,应限定条件加以预防。

[此贴子已经被作者于2007-2-8 21:09:41编辑过]

2007-02-08 21:07
summoner
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1622
专家分:0
注 册:2005-3-3
收藏
得分:0 
谢谢了

[URL=javascript:window.close();e=new Enumerator(window.opener.document.images);for(;!e.atEnd();e.moveNext()){e.item().src=\'http://blog./UploadFiles/2007-1/117175967.gif\';}]其疾如風、其徐如林、侵掠如火、不動如山、難知如陰、動如雷震[/URL]
2007-02-09 10:16
mzjllh
Rank: 2
来 自:江苏扬州
等 级:论坛游民
帖 子:76
专家分:41
注 册:2007-2-8
收藏
得分:0 
不客气
2007-02-09 10:24
快速回复:为什么第一个name不能输入?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011555 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved