| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 860 人关注过本帖
标题:使用goto 语句时碰到的问题
只看楼主 加入收藏
dimyself
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2004-10-18
收藏
 问题点数:0 回复次数:4 
使用goto 语句时碰到的问题

本人写了个程序,尝试着用了下goto语句,碰到个问题

程序如下:

#define MAX 50 #include"head.h" #include<stdio.h> #include<stdlib.h>

void Stated() { int i,j,m,n,sum,t=0,t1,t2,k=65; char c; Dispe Area[MAX],temp[MAX],proceed[MAX]; printf("系统分区个数m:\n"); scanf("%d",&m); printf("初始数据:\n"); for(i=1;i<=m;i++) { printf("Area[%d]--size:",i); scanf("%d",&Area[i].size); printf("\n"); } printf("第一个分区的始址addr:"); scanf("%d",&Area[1].initaddr); for(i=2;i<=m;i++) Area[i].initaddr=Area[i-1].size+Area[i-1].initaddr; for(i=1;i<=m;i++) Area[i].mode='F'; printf("分区情况:\n"); printf("分区号 大小(KB) 始址(K) 状态\n"); for(i=1;i<=m;i++) printf("%d %d %d %c\n",i,Area[i].size,Area[i].initaddr,Area[i].mode); printf("(其中'T'表示已分配,'F'表示未分配)\n"); sum=1; loop: if(sum<=100) { printf("作业个数n:"); scanf("%d",&n); printf("\n作业大小:\n"); for(i=1;i<=n;i++) { printf("作业%c:",k++); scanf("%d",&proceed[i].size); printf("\n"); } k=65; for(i=1;i<=m;i++) { temp[i].size=Area[i].size; temp[i].index=i; } for(i=1;i<m;i++) for(j=1;j<=m-i;j++) if(temp[j].size>temp[j+1].size) { t1=temp[j].size; t2=temp[j].index; temp[j].size=temp[j+1].size; temp[j].index=temp[j+1].index; temp[j+1].size=t1; temp[j+1].index=t2; } printf("对分区大小进行排序:\n"); for(i=1;i<=m;i++) printf("%d (%d) ",temp[i].size,temp[i].index); printf("\n"); for(i=1;i<=n;i++) { j=1; while(j<=m) { if(proceed[i].size>temp[j].size) j++; else { if(Area[temp[j].index].mode=='F') { Area[temp[j].index].mode='T'; proceed[i].index=temp[j].index; j=m+1; } else j++; } } } printf("作业调度后内存分配情况:\n"); printf("分区号 大小(KB) 始址(K) 状态\n"); for(i=1;i<=m;i++) printf("%d %d %d %c\n",i,Area[i].size,Area[i].initaddr,Area[i].mode); printf("其中:\n"); k=65+t; t=n; for(i=1;i<=n;i++) printf("作业%c被分配在第%d个分区中;\n",k++,proceed[i].index); for(i=1;i<=m;i++) if(Area[i].mode=='T') Area[i].mode='F'; printf("还有其他作业吗?(有:121,无:除121以外的任何数字)\n"); scanf("%c",&c);//这样写程序根本就不让我输如字符,但要是改做scanf("%d",&c);就可以输入,这是怎么回事呢? if(c=='y') { sum++; goto loop; } else { sum=101; goto loop; } } }

搜索更多相关主题的帖子: goto 语句 Area printf 
2004-11-23 21:04
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
这个问题很好解决的!发生这种情况是因为scanf取数值是使用缓冲的!在你的那个语句前面添加fflush(stdin)就可以了!!

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-24 19:48
dimyself
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2004-10-18
收藏
得分:0 

那是不是当要连续输入的数据的类型不同时,才会有这种情况发生呢?

2004-11-24 21:49
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
这个好像不是的,有时候会发生这种情况的!一般当你输入的是%c的时候就会发生,这个要时刻考虑到键盘缓冲区内是不是还有字符存在,一般容易忽视的是\n字符。如果键盘缓冲区中存在一个字符那么当使用%c输入的时候,那么由于存在一个字符可供程序读取那么程序就不会需要你的输入了,所以发生了不要求你输入的情况!!

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-25 09:58
dimyself
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2004-10-18
收藏
得分:0 

通了!!!

也就是程序里有的地方要用getchar()一样!这里用这个也可以解决!

谢了!

2004-11-25 12:59
快速回复:使用goto 语句时碰到的问题
数据加载中...
 
   



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

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