Juniorboy 发表于 2020-3-31 10:04:31

程序没看懂

2. C 语言中有个 atoi 函数(定义于 <stdlib.h> 头文件中),用于将字符串中的值解析为对应的整型数字。现在要求我们自己写一个程序,实现类似的功能。
基本要求:
A. 将用户输入的字符串中代表数字的字符转换为整型数值e;~|NBt4
B. 打印转换结果版权属于:bbs.fishc.com
C. 只打印第一组数字来自:bbs.fishc.com
提示:你可以使用 break 语句在适当的时候跳出循环。



#include <stdio.h>

int main()
{
      int ch;
      int num = 0;

      printf("请输入待转换的字符串:");

      do
      {
                ch = getchar();

                if (ch >= '0' && ch <= '9')
                {
                        num = 10 * num + (ch - '0');
                }
                else
                {
                        if (num)
                        {
                              break; // 如果已有数字,则退出循环
                        }
                }

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

      printf("结果是:%d\n", num);

      return 0;
}

请帮忙解释一下,越详细越好,谢谢哈

BngThea 发表于 2020-3-31 10:11:32

就是讲字符转成数据,然后放到正确的位上
举个例子,输入了'123\n'
第一次循环,ch为'1', num 为 1
第二次循环,ch为 '2' , num变成了12
第三次循环,ch为'3', num变成了123
第四次循环,ch为 '\n',走else分支,跳出

Draem 发表于 2020-3-31 10:47:06

#include <stdio.h>

int main()
{
      int ch;
      int num = 0;

      printf("请输入待转换的字符串:");

      do
      {
                ch = getchar();

                if (ch >= '0' && ch <= '9')//如果输入字符是0-9的数字
                {
                        num = 10 * num + (ch - '0');//将这些字符按照十进制的方式依次存进整形num所在的内存中
                }
                else//如果输入的字符不在0-9之间 也就是输入了其他字符 例如空格,回车等’
                {
                        if (num)
                        {
                              break; // 如果已有数字,则退出循环
                        }
                }

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

      printf("结果是:%d\n", num);

      return 0;
}

Juniorboy 发表于 2020-3-31 11:48:02

BngThea 发表于 2020-3-31 10:11
就是讲字符转成数据,然后放到正确的位上
举个例子,输入了'123\n'
第一次循环,ch为'1', num 为 1


请问那个break是跳出do while循环吗

BngThea 发表于 2020-3-31 13:57:48

Juniorboy 发表于 2020-3-31 11:48
请问那个break是跳出do while循环吗

对的

Juniorboy 发表于 2020-3-31 19:12:50

BngThea 发表于 2020-3-31 13:57
对的

明白了,谢谢哈!
页: [1]
查看完整版本: 程序没看懂