| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1327 人关注过本帖
标题:[求助]急!急!急!SWITCH 问题
只看楼主 加入收藏
yu_hua
Rank: 2
等 级:论坛游民
帖 子:222
专家分:95
注 册:2006-8-10
收藏
得分:0 
以下是引用laigaoat2005在2007-4-23 20:52:00的发言:
我刚才看了你给别人是这样回的。

你问的问题不知是否可以这样理解?
就是getchar()每次只能接收一个字符,但是用户一次键入多个字符后,他先接收一个,等到第二次再接收一个……?

我瞎猜的,不知对不对。
我想重新编一个,编了好久都没有弄出来。

你的“瞎猜”OK!!!
用户一次键入多个字符后,这些字符(的ASCII编码)被操作系统自动存放到“键盘缓冲区”
getchar( )每次从该缓冲区取走一个字符。如果缓冲区空了,getchar()就不得不等待用户
输入。

2007-04-24 08:33
dqq74fox
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-4-24
收藏
得分:0 

将程序改如下就可以了:
#define N 20
#include<stdio.h>
#include<bios.h>

int main(void)
{
int i=0;
char c;

for(i=0;i<N;i++)
{
/* c=getchar();*/
c=bioskey(0);
switch (c)
{
case '0':printf("zero ");break;
case '1':printf("one ");break;
case '2':printf("two ");break;
case '3':printf("three ");break;
case '4':printf("four ");break;
case '5':printf("five ");break;
case '6':printf("six ");break;
case '7':printf("seven ");break;
case '8':printf("eight ");break;
case '9':printf("nine ");break;
}
}
}

就可以每输入一个字符,它就输出相应的英文字母;
如果用getchar()函数:
用户一次键入多个字符后,这些字符(的ASCII编码)被操作系统自动存放到“键盘缓冲区”
getchar( )每次从该缓冲区取走一个字符。如果缓冲区空了,getchar()就不得不等待用户
输入。

2007-04-24 09:33
oclassic
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2007-4-18
收藏
得分:0 
c=bioskey(0);

做何解~???

编程群号码30772309群刚刚建立一个论坛http://tszbbs./?u=2 诚招斑猪哦
2007-04-24 11:09
jacy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-18
收藏
得分:0 

我没用bioskey()这个函数,因为不会
用的还是getchar(),只不过用了EOF做为结束输入的标志。此外,int也可以存char的数据吧

int main(void)
{
int c=0;
c=getchar();
while(c!=EOF)
{
switch (c)
{
case '0':printf("zero ");break;
case '1':printf("one ");break;
........ //略去
}
c=getchar();
}
}


2007-04-24 13:17
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 
回复:(oclassic)[求助]急!急!急!SWITCH ...

11楼:

你的“瞎猜”OK!!!
用户一次键入多个字符后,这些字符(的ASCII编码)被操作系统自动存放到“键盘缓冲区”
getchar( )每次从该缓冲区取走一个字符。如果缓冲区空了,getchar()就不得不等待用户
输入。


谢谢,我能明白你的意思了。但是对于“键盘缓冲区”我不太懂,请问你能讲明白些吗?关于getchar()与“键盘缓冲区”的知识?谢谢了。请你吃西瓜:

2007-04-24 14:32
YANGDAN123
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2007-1-16
收藏
得分:0 
同意八神的话

我将用我全部的时间去寻找我生命和灵魂的唯一伴侣,得之,我幸,不得,我命。
2007-04-24 15:35
qizihan
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-4-24
收藏
得分:0 

bioskey()
功能:键盘接受
原型:void(int cmd)
头文件:bios.h
实例:以下是一个用方向键控制的小人移动的代码
#include<stdio.h>
#include<bios.h>
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ESC 0x11b
#define NUM 219
void main()
{
int key,x,y,a,b;
int i,j;
clrscr();
for(i=20;i<=60;i++)
{
gotoxy(i,4);
printf("%c",NUM);
gotoxy(i,21);
printf("%c",NUM);
}
for(i=4;i<=21;i++)
{
gotoxy(19,i);
printf("%c",NUM);
gotoxy(61,i);
printf("%c",NUM);
gotoxy(18,i);
printf("%c",NUM);
gotoxy(62,i);
printf("%c",NUM);
}
gotoxy(40,10);
x=40;
y=10;
printf("\1");
gotoxy(x,y);
for(;;)
{
a=x;
b=y;
key=bioskey(0);
switch(key)
{
case UP:
{
y--;
if(y==4)
{
y++;
b++;
}
gotoxy(x,y);
}break;
case DOWN:
{
y++;
if(y==21)
{
y--;
b--;
}
gotoxy(x,y);
}break;
case LEFT:
{
x--;
if(x==19)
{
x++;
a++;

}
gotoxy(x,y);
}break;
case RIGHT:
{
x++;
if(x==61)
{
x--;
a--;
}
gotoxy(x,y);
}break;
case ESC : exit(0);
default: continue;
}
printf("\1");
gotoxy(a,b);
printf(" ");
gotoxy(x,y);
}
}


2007-04-25 00:06
wood1314
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-4-21
收藏
得分:0 
尽量不要用getchar() 应该用标准的格式 输入输出.
在说了, 回车, 空格 ,都是字符, 你的那个程序不能很好的执行的 !
我改动了一点儿 当输入负数时 退出.
#include<stdio.h>
int main(void)
{
int i=0,c;

scanf("%d",&c);

while(c>=0)
{

switch (c)
{
case 0 :printf("zero "); break;
case 1 :printf("one "); break;
case 2 :printf("two "); break;
case 3 :printf("three "); break;
case 4 :printf("four "); break;
case 5 :printf("five "); break;
case 6 :printf("six "); break;
case 7 :printf("seven "); break;
case 8 :printf("eight "); break;
case 9 :printf("nine "); break;
default : printf("NULL");
}
scanf("%d",&c);
}

}
对于那个getchar()函数 一定要按enter才能将字符送入内存(enter作为此函数的结束符),一旦定义为字符型,不管是getchar()或格式化的scanf()都会不停的接受字符(能接受多少我也不是很清楚,应该和缓冲区定义的大小有关,缓冲满了就会丢弃后面的字符),并把这些字符依次送入内存,就好象一个循环似的,直到字符结束为止.

所以楼主的程序 比如一次输入1234 就会输出onetwothreefour 并且已经循环了5次.别忘了回车也算一次呢. 这不是什么缓冲区的问题,纯粹的函数参数就是这么定义的. 当然了既然你把getchar()赋给一个字符,但是原来内存中的那些字符后面的区域还在,记住回车才是结束符.输入函数就好象一个循环似的. 在每次getchar()参数递增的同时,i也在增
就造成了 那样的结果.

[此贴子已经被作者于2007-4-25 16:09:16编辑过]

2007-04-25 15:57
zy1437zy
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-4-25
收藏
得分:0 
以下是引用dqq74fox在2007-4-24 9:33:16的发言:

将程序改如下就可以了:
#define N 20
#include<stdio.h>
#include<bios.h>

int main(void)
{
int i=0;
char c;

for(i=0;i<N;i++)
{
/* c=getchar();*/
c=bioskey(0);
switch (c)
{
case '0':printf("zero ");break;
case '1':printf("one ");break;
case '2':printf("two ");break;
case '3':printf("three ");break;
case '4':printf("four ");break;
case '5':printf("five ");break;
case '6':printf("six ");break;
case '7':printf("seven ");break;
case '8':printf("eight ");break;
case '9':printf("nine ");break;
}
}
}

就可以每输入一个字符,它就输出相应的英文字母;
如果用getchar()函数:
用户一次键入多个字符后,这些字符(的ASCII编码)被操作系统自动存放到“键盘缓冲区”
getchar( )每次从该缓冲区取走一个字符。如果缓冲区空了,getchar()就不得不等待用户
输入。

呵呵 !
正解啊
学习。。。

2007-04-25 16:31
ycxue46
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-4-16
收藏
得分:0 

因为放了一个for 语句,搞成循环.真不懂一定要放哪个干什么...

2007-04-25 16:41
快速回复:[求助]急!急!急!SWITCH 问题
数据加载中...
 
   



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

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