天道不酬勤 发表于 2023-10-30 20:52:58

c语言 S1E13课后作业求助

我的解题思路是:{:10_277:}

[*]把所有字符都存储到数组中
[*]用if语句判断出数字开始处
[*]把数字与数字之后的数字重新存储到一个新的数组
[*]使用if语句对新数组判断,当遇到字母时直接结束程序



目前遇到的问题:数组读取与存储好像出了点问题{:5_100:}

javascript:;
javascript:;
代码如下:
#include<stdio.h>
int main ()

{
      int a = 0 , i = 0 , o = 0 , k = 0;
      char b , c;

      printf("请打印一串字符:\n");

      while (( b = getchar() ) != '\n') //存储到数组中
      {
                a = a + 1;
      }

      while (i <= a) //把数字与之后所有字母存储到另一个数组
      {
                if (b >= 48 && b <= 57)
                        {
                              while (i <= a)
                              {
                                        c = b;
                                        o = o + 1;
                              }
                        }
                i++;
      }

      while (k <= o) //开始打印数字
      {
                if( c >= 48 && c <= 57) //打印出前面数字
                        {
                              putchar( c );
                        }
                        else    {
                              break; //其他字符则打断跳出
                              }
                k = k + 1;
      }
      return 0;
}

isdkz 发表于 2023-10-30 20:53:22

问题分析:
根据代码逻辑,你的目标是将输入的字符数组中的数字提取出来,并打印出来。但是在代码中存在一些问题,导致程序无法正确执行。

问题1:数组越界访问
在存储字符到数组b时,没有对数组边界进行检查,可能导致数组越界访问。此外,数组c的大小应该至少为a的大小,以确保能够存储所有的数字字符。

问题2:循环条件错误
在第二个while循环中,判断条件应该是i < a,而不是i <= a。否则当i等于a时,循环会继续执行,导致数组越界访问。

问题3:打印字符错误
在打印数字字符时,应该使用c而不是c。因为o是用于记录新数组c的长度的变量,而k是用于遍历新数组c的变量。

问题4:跳出循环错误
在遇到非数字字符时,应该使用break语句跳出循环,而不是直接打断跳出。因此,应该将break放在if语句的外面。

解决方案:
下面是修复了上述问题的代码:

#include <stdio.h>
int main()
{
    int a = 0, i = 0, o = 0, k = 0;
    char b, c;

    printf("请打印一串字符:\n");

    while ((b = getchar()) != '\n' && a < 127) // 存储到数组中并检查边界
    {
      a = a + 1;
    }

    while (i < a) // 把数字与之后所有字母存储到另一个数组
    {
      if (b[ i] >= 48 && b[ i] <= 57)
      {
            while (i < a)
            {
                c = b[ i];
                o = o + 1;
                i = i + 1; // 添加对i的递增操作
            }
      }
      else
      {
            break; // 其他字符则跳出循环
      }
      i = i + 1; // 添加对i的递增操作
    }

    while (k < o) // 开始打印数字
    {
      if (c >= 48 && c <= 57)
      {
            putchar(c);
      }
      else
      {
            break; // 其他字符则跳出循环
      }
      k = k + 1;
    }

    return 0;
}

通过以上修改,你的代码应该能够正确地提取数字并打印出来。希望对你有帮助!如果还有其他问题,请随时提问。

天道不酬勤 发表于 2023-10-30 20:55:21

isdkz 发表于 2023-10-30 20:53
问题分析:
根据代码逻辑,你的目标是将输入的字符数组中的数字提取出来,并打印出来。但是在代码中存在一 ...

爱了爱了{:7_140:}
页: [1]
查看完整版本: c语言 S1E13课后作业求助