while和do while课后习题求解(疑问见注释)
实现功能A. 将用户输入的字符串中代表数字的字符转换为整型数值
B. 打印转换结果
C. 只打印第一组数字
#include <stdio.h>
int main()
{
int ch;
int num = 0;
printf("请输入待转换的字符串:");
do//先进入循环
{
ch = getchar();//将获取的字符赋值给ch
if (ch >= '0' && ch <= '9')//如果ch在0和9之间
{
num = 10 * num + (ch - '0');//这个操作是什么意思呢?
}
else//如果ch不在0和9之间
{
if (num)//是指ch既不在0和9之间同时num不为0吗时则退出循环吗?
{
break; // 如果已有数字,则退出循环(这一个是为了实现 只打印第一组数字这个功能吗,怎么解释呢?
}
}
}
while (ch != '\n');//如果不是换行,则继续执行循环
printf("结果是:%d\n", num);
return 0;
}
希望大佬通俗的解释一下这个代码的流程谢谢 本帖最后由 baige 于 2020-8-10 01:11 编辑
ch = getchar();获取得到的是字符-'0'就变成整形数字
if num 是num不等于0时退出循环
num = 10 * num + (ch - '0'); // 以123\n为例 第一次:num = 10 * 0 + ('1'-'0') = 1; 第二次 num = 10 * 1 +('2'-'0') = 12 第三次 :num = 10 * 12+ ('3'-'0') = 123, 输入'\n'程序跳到else 此时num = 123不等于0 循环break退出
如果你输入123空格456
输出123 #include <stdio.h>
int main() {
char ch;//char类型就行了
int num = 0;// 用来存储数字
printf("请输入待转换的字符串:");
do { //先进入循环
ch = getchar();//将获取的字符赋值给ch, 获取得到的是字符 字符'0'-'9' 转换为数字 操作为减掉字符'0'
if (ch >= '0' && ch <= '9') { //如果ch在字符'0'和字符'9'之间
num = 10 * num + (ch - '0');//用来纪录数字的,操作上面有例子
} else { //如果ch不在字符'0'和字符'9'之间
if (num) { //如果num!=0循环break退出
break; // 如果已有数字,则退出循环(这一个是为了实现 只打印第一组数字这个功能吗,怎么解释呢?是,你输入多组数据 并且不是用换行 会输出第一组非0数字
}
}
} while (ch != '\n'); //如果不是换行,则继续执行循环
printf("结果是:%d\n", num);
return 0;
}
页:
[1]