C语言编写个小程序

C语言编写个小程序,第1张

#include <stdio.h>

#define Pi 3.1416

int main()

{float r,h,c,s1,s2,v1,v2

 printf("请输入圆半径和圆柱高:")

 scanf("%f%f",&r,&h)

 c=2*Pi*r

 s1=0.5*c*r

 s2=4*s1

 v1=3*s1*r/4

 v2=s1*h

 printf("圆周长=%f\n圆面积=%f\n圆球表面积=%f\n",c,s1,s2)

 printf("圆球体积=%f\n圆柱体积=%f\n",v1,v2)

 return 0

}

char c,password[8]

int i=0

while(i<8)

{

c=char(getch())

if(int(c)==13)//敲入回车

break

if(int(c)<58&&int(c)>47||int(c)>64&&int(c)<91||int(c)>96&&int(c)<123)

{

cout<<'*'

password[i]=c

i++

}

}

password[i]='\0'

该段函数在试验时发现:当输入backspace键时,没有反应,用户无法作出修改。于是添加关于backspace的判别。backspace键的ASCII码为8。

char c,password[8]

int i=0,x,y

x=wherex() //由于backspace的缘故,考虑初始位置问题

y=wherey()

while(i<8)

{

c=char(getch())

if(int(c)==8)//敲入backspace

{

gotoxy(x+i-1,y) //回到前一个位置

cout<<" "//挡住后面的字符,此时输入焦点又回到了后面

gotoxy(x+i-1,y) //再次移动输入点

i--//字符数减少

mypass[i]='\0' //字符被删除

continue //再次循环,等待输入

}

if(int(c)==13)

break

if(int(c)<58&&int(c)>47||int(c)>64&&int(c)<91||int(c)>96&&int(c)<123)

{

cout<<'*'

password[i]=c

i++

}

}

password[i]='\0'

这一段比上面完善得多,用户可以删除部分字符。然而(但是…可是…but…however),问题1,当不停的按下backspace键,结果将是灾难性的,如果你是在cout<<"输入密码:"后面执行mypass(password),那么它将把“输入密码:”几个字也毫不客气的删除;问题2,当用户在没有输入任何字符的时候按下回车键,程序照样同意,但是这将产生一个空密码。

但是这两个问题很好解决,只要加入几个判别式就行了:),同时我还发现,将输入点向前移动一位的 *** 作完全可以用cout<<char(8)<<' '<<char(8)来代替,这样连x,y以及wherex(),wherey()都用不着了。最后的程序如下:

void mypass(char mypass[8])

{

int i=0

char c

while(1)

{

c=char(getch())

if(int(c)==8)//敲入backspace

{

if(!i)

continue

cout<<char(8)<<' '<<char(8)

i--

mypass[i]='\0'

continue

}

if(int(c)==13) //敲入回车键

{

if(!i)

continue

else

break

}

if((int(c)<58&&int(c)>47||int(c)>64&&int(c)<91||int(c)>96&&int(c)<123)&&i<8)

{

cout<<'*'

mypass[i]=c

i++

}

else

continue

}

mypass[i]='\0'

return

}

至此大功告成。:)

#include<stdio.h>

int main()//加个int 别的都不行 戒掉void

{ char ch[7]={"65ab21"}//从ch[0]到ch[6]分别保存了'6' ,'5', 'a', 'b', '2', '1', 0(注意最后的0)

int i,s=0

for(i=0ch[i]>='0'&&ch[i]<'9'i+=2)//ch[0]='6'满足条件,但第2次ch[2]='a'不满足条件了

s=10*s+ch[i]-'0'//ch[0]-'0'='6'-'0'=6,字符相减得到数字

printf("%d\n",s)//由于循环一次 s是6

return 0//int main()所以要记得返回

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11204365.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存