scanf和getchar都不能输入字符值,为什么?

L11168032 2011-09-05 03:58:52
程序如下:
#include <stdio.h>
#include <MALLOC.H>

#define NULL 0
#define LEN sizeof(struct Student)

struct Student // 定义学生结构体
{
int Num;
char Name[9];
char Sex[1];
float Score1;
struct Student *Next;
};

int StudentNum;

struct Student *Creat(void)//创建学生链表
{
struct Student *head, *p1, *p2;
char Com;
StudentNum = 0;

do
{
p2 = p1 = (struct Student *)malloc(LEN);
printf("请输入学号:");
scanf("%d", &p1->Num);
printf("\n");

printf("请输入姓名:");
scanf("%s", &p1->Name);
printf("\n");

printf("请输入性别:");
scanf("%s", &p1->Sex);
printf("\n");

printf("请输入成绩:");
scanf("%f", &p1->Score1);
printf("\n");

p2->Next = p1;

++StudentNum;
if (StudentNum == 1)
{
head = p1;
}

printf("继续输入?Y/N\n");
scanf("%c",&Com);

} while (Com == 'Y');

p2->Next = NULL;
return(head);
}

void Printf(struct Student *head)// 输出链表
{
struct Student *p1;
p1 = head;

if (p1->Num != NULL)
{
printf("%d\n", p1->Num);
printf("%s\n", p1->Name);
printf("%s\n", p1->Sex);
printf("%f\n", p1->Score1);
p1 = p1 + 1;
}
}

void main()
{
struct Student *head;
head = Creat();
Printf(head);
}

请大侠解惑,在线等。。
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
风吹PP凉SS 2011-09-05
  • 打赏
  • 举报
回复
用getchar()吸收最后那个回车是吧?[Quote=引用 4 楼 jackyjkchen 的回复:]
每个scanf后面加一个getchar(),一个都不能漏,缓冲区没刷新的问题,平均一天要回答5个以上这问题……

不晓得做C语言的那帮人怎么想的,一个初学者犯错是一个人的问题,大家都犯错就是设计的问题
[/Quote]
尘缘udbwcso 2011-09-05
  • 打赏
  • 举报
回复

建议把
while (Com == 'Y');
改成
while (Com == 'Y' || Com == 'y');
無_1024 2011-09-05
  • 打赏
  • 举报
回复
每个输入前面加一个fflush(stdin);
c_losed 2011-09-05
  • 打赏
  • 举报
回复

do
{
p2 = p1 = (struct Student *)malloc(LEN);
printf("请输入学号:");
fflush(stdin);//------------------刷新
scanf("%d", &p1->Num);
printf("\n");

printf("请输入姓名:");
scanf("%s", &p1->Name);
printf("\n");

printf("请输入性别:");
scanf("%s", &p1->Sex);
printf("\n");

printf("请输入成绩:");
scanf("%f", &p1->Score1);
printf("\n");

p2->Next = p1;

++StudentNum;
if (StudentNum == 1)
{
head = p1;
}

printf("继续输入?Y/N\n");
fflush(stdin);//------------------刷新
scanf("%c",&Com);

} while (Com == 'Y');
jackyjkchen 2011-09-05
  • 打赏
  • 举报
回复
每个scanf后面加一个getchar(),一个都不能漏,缓冲区没刷新的问题,平均一天要回答5个以上这问题……

不晓得做C语言的那帮人怎么想的,一个初学者犯错是一个人的问题,大家都犯错就是设计的问题
L11168032 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 l11168032 的回复:]
程序如下:
#include <stdio.h>
#include <MALLOC.H>

#define NULL 0
#define LEN sizeof(struct Student)

struct Student // 定义学生结构体
{
int Num;
char Name[9];
char Sex[1];
float Score1;
struct Stud……
[/Quote]用GETS也不行的
hu7324829 2011-09-05
  • 打赏
  • 举报
回复
就scanf的用法来说,你用的是对的.可以这么用
selooloo 2011-09-05
  • 打赏
  • 举报
回复
清空缓冲区,读取字符串用GETS比较好

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧