cc84525145 发表于 2019-1-30 22:57:58

带你学c带你飞课程里的问题

#include <stdio.h>

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

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

      do
      {
                ch = getchar();

                if (ch >= '0' && ch <= '9')
                {
                        num = 10 * num + (ch - '0');//不了解这边 10 * num 是什么用处,但是删除后再编译输入只会出现一个数字
                }
                else
                {
                        if (num)
                        {
                              break;
                        }
                }

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

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

      return 0;
}


代码源于带你学c带你飞课程S1E13 动动手第2题


请问这边10 * num是什么用途啊{:5_100:}

ba21 发表于 2019-1-31 00:02:22

使之与 ASCII码表里面的数字对应。

行客 发表于 2019-1-31 10:09:49

本帖最后由 行客 于 2019-1-31 10:10 编辑

请观察注释:
// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


#include <stdio.h>

int main()
{
      int ch;
      int num = 0;    // num为整型变量,初始化为0。在do循环里是将输入的字符转变为数字,并组成整型变量。

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

      do
      {
                ch = getchar();

                if (ch >= '0' && ch <= '9')
                {
                        num = 10 * num + (ch - '0');        //假设你输入的是字符串为'67a'。
                                                                     //第一次循环,ch为'6':num = 10 * 0 + (54 - 48),num值为6。ch即6的ASII码为54,'0'的ASII码为48
                                                                    //第二次循环,ch为'7':num = 10 * 6 + (55 - 48),num值为67。
                                                                     //第三次循环:ch 为'a',进入下面的else。
                }
                else
                {
                        if (num)
                        {
                              break;
                        }
                }

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

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

      return 0;
}

cc84525145 发表于 2019-1-31 10:24:24

ba21 发表于 2019-1-31 00:02
使之与 ASCII码表里面的数字对应。

那再请问一下 getchar函数是把我输入的字符串一个个依次转换成ASCII码吗
比如说我这边输入 12a 1先进入if语句中循环将num赋值为1 2再继续进入if中将num赋值为12 a再进入语句中因为不符合第一个if所以跳到else 因为num不等于0 所以为真 执行break 跳出语句 输出num

cc84525145 发表于 2019-1-31 10:25:46

行客 发表于 2019-1-31 10:09
请观察注释:

谢谢!

兄弟借个头 发表于 2019-1-31 10:58:20

膜拜

泡芙小王子 发表于 2019-1-31 16:52:13

都是大佬
{:10_256:}
页: [1]
查看完整版本: 带你学c带你飞课程里的问题