返回信息流void scanfnum(int *n,int num) //构造函数scanfnum
{
char ch;
*n=0;
for(int i=0;i<num;i++)
{
ch=getch();
while(ch<'0'||ch>'9')
ch=getch();
putch(ch);
(*n)=(*n)*10+int(ch)-48;
}
}
这个函数是啥意思啊,,,求给详细讲解一下= =泪求= = 还有最后那个式子是干嘛的哎?= =
这是一条镜像帖。来源:北邮人论坛 / cpp / #75106同步于 2013/11/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[问题]求大神指导一段代码= =
susanlt
2013/11/7镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
scanfnum 读入字符串并转为数字形式
'0'~'9'之间为有效的数字
while表示非数字直接读取下一个
最后一句计算当前输入的n
ch -'0': char到数字的对应转换,如'0' - '0' = 0, '5' - '0' = 5
实在不理解,printf,看每一步的输出
【 在 susanlt 的大作中提到: 】
: void scanfnum(int *n,int num) //构造函数scanfnum
: {
: char ch;
: ...................
【 在 li375268037 的大作中提到: 】
: scanfnum 读入字符串并转为数字形式
: '0'~'9'之间为有效的数字
: while表示非数字直接读取下一个
: ...................
膜拜大神啊~那最后一个那个式子,是不是说,计算一下这一次输入数字的存储空间,然后往后移动一个存储空间,然后继续读下一个数字,然后存储啊?那那个*n是指针么?是指针的话*n=0是咋个情况?还有我想问下,那这时候怎么控制i的循环呢,i什么时候才能加一呀~泪。。
函数功能:
得到一个整数,长度为num
char ch; //一个临时变量,用来存储每次获取的字符
*n=0; //将指针指向的值赋值为0
for(int i=0;i<num;i++) //循环,循环次数为num
{
ch=getch(); //获取一个输入字符,比如输入'9'
while(ch<'0'||ch>'9') //如果获取的字符不是数字,则继续获取直到为数字
ch=getch();
putch(ch); //将获取的字符显示在屏幕上
(*n)=(*n)*10+int(ch)-48; //例如之前你已经获得了一个数字8,现在又输入9,那就应该是89。这句话是实现这个:将之前的8乘以10,得到80,再加上'9'的ASCII码57,再减去48(字符'0'的ASCII码),结果为89
} //循环的一次结束,i加1
谢大猪哥指点!!!!!赞一个!
【 在 changzhu 的大作中提到: 】
: 函数功能:
: 得到一个整数,长度为num
: char ch; //一个临时变量,用来存储每次获取的字符
: ...................
其实就是循环输入[0,9]范围内的数,然后每一次将其叠加到10 * n上面;C/C++这种艰涩的语法是有点不好读。。
输入:7,8,9,最终输出 789 (int)而已