C语言输入 Ctrl+Z不能跳出循环怎么改?

#include<stdio.h>#include<stdlib.h>#include<conio.h>structstu*creat(structstu*h);void... #include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct stu *creat(struct stu *h);
void print_stu(struct stu *h);
struct stu
{
int num;
char name[10];
char sex;
int bri;
char add[30];
char dep[10];
struct stu *next;
};
main()
{
struct stu *head;
head=NULL;
head=creat(head);
print_stu(head);
}
struct stu *creat(struct stu *h)
{
char ch;
struct stu *p1,*p2;
p1=p2=(struct stu*)malloc(sizeof(struct stu));
if(p2!=NULL)
{
printf("学号");
scanf("%d",&p2->num);
printf("姓名");
scanf("%s",&p2->name);
ch=getchar();
printf("性别");
getchar(p2->sex);
printf("生日");
scanf("%d",&p2->bri);
printf("地址");
scanf("%s",&p2->add);
printf("系别");
scanf("%s",&p2->dep);
p2->next=NULL;
}
while(p2->num!='EOF')
{
if(h==NULL)
h=p2;
else
p1->next=p2;
p1=p2;
p2=(struct stu*)malloc(sizeof(struct stu));
if(p2!=NULL)
{
printf("学号");
scanf("%d",&p2->num);
printf("姓名");
scanf("%s",&p2->name);
ch=getchar();
printf("性别");
getchar(p2->sex);
printf("生日");
scanf("%d",&p2->bri);
printf("地址");
scanf("%s",&p2->add);
printf("系别");
scanf("%s",&p2->dep);
p2->next=NULL;
}
}
return h;
}
void print_stu(struct stu *h)
{
struct stu *temp;
temp=h;
while(temp!=NULL)
{
printf("%d",temp->num);
printf("%s",temp->name);
printf("%d",temp->bri);
printf("%s",temp->add);
printf("%s",temp->dep);
printf("%c",temp->sex);
temp=temp->next;
}
}
展开
 我来答
xoaxa
推荐于2016-05-02 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3474万
展开全部

1、在函数struct stu *creat(struct stu *h);中,scanf("%s",&XX);不需要取址符&。

2、EOF是系统定义的数值常量,其值是-1,那么'EOF'是什么?

我帮你重写。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct stu *creat();
void print_stu(struct stu *h);

struct stu {
int num;
char name[20];
char sex[3];
int bri;
char add[30];
char dep[10];
struct stu *next;
};

int main() {
struct stu *head = creat();
print_stu(head);
return 0;
}

struct stu *creat() {
struct stu t,*head,*p;
head = p = (struct stu*)malloc(sizeof(struct stu));
while(1) {
printf("学号(0 to quit):");
scanf("%d",&t.num);
if(t.num == 0) break;
printf("姓名:");
scanf("%s",t.name);
printf("性别:");
scanf("%s",t.sex);
printf("生日:");
scanf("%d",&t.bri);
printf("地址:");
scanf("%s",t.add);
printf("系别:");
scanf("%s",t.dep);
p->next = (struct stu*)malloc(sizeof(struct stu));
p = p->next;
*p = t;
}
p->next = NULL;
return head;
}
void print_stu(struct stu *head) {
struct stu *temp = head->next;
while(temp) {
printf("%d\t",temp->num);
printf("%s\t",temp->name);
printf("%d\t",temp->bri);
printf("%s\t",temp->add);
printf("%s\t",temp->dep);
printf("%s\n",temp->sex);
temp = temp->next;
}
}
追问
while(1)是什么意思?
追答
是死循环,只有在响应学号输入时,键入0才退出循环。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式