| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 823 人关注过本帖
标题:[求助]输入长度
只看楼主 加入收藏
guochen3
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-1-16
收藏
 问题点数:0 回复次数:16 
[求助]输入长度

请教一下:
    我想输入一个长度Z,它的默认长度是(Z=10.0),如果我是直接回车的
话就是默认长度即Z=10.0,如果不是回车那样Z等于输入的长度。如何判断是直接回车这
部分应如何写呀。

搜索更多相关主题的帖子: 长度 输入 
2006-07-21 10:43
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 

我给你个我自己的想法。

你可以在程序中定一个用于存放输入的栈

#define MAX_STACK_SIZE 80

typedef unsigned char stack_t;
stack_t my_inputs[MAX_STACK_SIZE];

然后设置一个栈的初始指针
stack_t *ptos = my_inputs;

当然在使用栈之前先初始化一下,清除数组中“垃圾值”
memset(my_inputs, (stack_t)0, sizeof(stack_t) * MAX_STACK_SIZE);
(这个函数在mem.h和string.h中均能找到原型)

随后做个循环一个一个字符输入
do {
ch = getch(); /* 这个函数在conio.h中有原型 */
if (ch == 0x08) {/* 0x08好像是退格键吧?麻烦查一下,我不是很清楚 */
/* 如果是退格键则退栈 */
if(ptos > my_inputs) /* 栈内已有数据则后退 */
*ptos-- = (stack_t)0;
else
*ptos = (stack_t)0;
}
else if(ch != '\n' && (ch >= '0' && ch <= '9')) { /* 如果不是换行并且输入的是数字,则压栈 */
++ptos; /* 堆栈向上增长 */
*ptos = ch;
}

} while(ch != '\n');

if(ptos == my_inputs && *ptos == (stack_t)0)
/* 如果栈内没有数据,则设置默认长度 */
z = 10;
else
z = atoi((char *)my_inputs);
atoi是将字符串转换成整数的函数,当然自己也可以实现啦,看你的喜好。

我只是给出了部分代码,完整程序还是请搂主自己写吧!


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2006-07-21 10:59
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
int Z=10;

if(scanf("%d",&tem)==1)Z=tem;

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-07-21 11:02
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 
以下是引用baidu在2006-7-21 11:02:22的发言:
int Z=10;

if(scanf("%d",&tem)==1)Z=tem;

呵呵,果然简洁,最近自学数据结构和汇编,脑子有点昏了,考虑的太复杂了。


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2006-07-21 11:03
guochen3
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-1-16
收藏
得分:0 

版主:不能运行。
#include<stdio.h>
#include<string.h>
int main()
{ int tem;
int Z=10;
if(scanf("%d",&tem)==1)Z=tem;
else Z=10;
printf("%d",Z);
}
这个程序无法结束呀


雖然我很菜,但我永不言放棄。
2006-07-21 13:07
baidu
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:3811
专家分:0
注 册:2005-11-4
收藏
得分:0 
[QUOTE]雖然我很菜,但我永不言放棄。[/QUOTE]别放弃,再调试

偶放弃所有文章版权,偶在BCCN论坛任何贴子,可转贴,可散发,可抄袭,可复制,可被冒名顶替,可被任何人引用到任何文章中且不写出引文出处,偶分文不取。
2006-07-21 14:06
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

#include<stdio.h>
#include<conio.h>
#include<ctype.h>
int main()
{ int tem,i=0,Z;
char ch,check,str[10]="10";
check=ch=getchar();
while(ch!='\n')
{
str[i++]=ch;
ch=getchar();
}
if(check!='\n') str[i]='\0';
Z=atoi(str);
printf("%d",Z);
}

这个应该就行,不过改得有些乱。


对不礼貌的女生收钱......
2006-07-21 14:09
lhyanlh
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-7-11
收藏
得分:0 
scanf后用%s或则用gets,但要注意字符串越界!

%d不能直接回车结束!
2006-07-21 14:12
guochen3
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-1-16
收藏
得分:0 

我把%d换成%s还是用不了。
#include<stdio.h>
#include<string.h>
int main()
{ char tem;
int Z=10;
if(scanf("%s",&tem)==1)Z=atoi(tem);
else Z=10;
printf("%d",Z);
getch();
}
输入值了出来的结果更加不对了。


雖然我很菜,但我永不言放棄。
2006-07-21 16:15
lhyanlh
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-7-11
收藏
得分:0 
#include<stdio.h>
#include<string.h>
int main()
{ char tem[20];
int Z=10;
memset(tem, 0, sizeof(tem));
gets(tem);

if(atol(tem)==0)
Z=10;
else Z=atol(tem);
printf("%d",Z);
getch();
}
2006-07-21 16:46
快速回复:[求助]输入长度
数据加载中...
 
   



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

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