鱼C论坛

 找回密码
 立即注册
查看: 1255|回复: 2

[已解决]c语言 S1E13课后作业求助

[复制链接]
发表于 2023-10-30 20:52:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我的解题思路是:
  • 把所有字符都存储到数组中
  • 用if语句判断出数字开始处
  • 把数字与数字之后的数字重新存储到一个新的数组
  • 使用if语句对新数组判断,当遇到字母时直接结束程序



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


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

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

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

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

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

        while (k <= o) //开始打印数字
        {
                if( c[k] >= 48 && c[k] <= 57) //打印出前面数字
                        {
                                putchar( c[o] );
                        }
                        else    {
                                break; //其他字符则打断跳出
                                }
                k = k + 1;
        }
        return 0;
}
最佳答案
2023-10-30 20:53:22
问题分析:
根据代码逻辑,你的目标是将输入的字符数组中的数字提取出来,并打印出来。但是在代码中存在一些问题,导致程序无法正确执行。

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

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

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

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

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

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

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

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

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

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

    return 0;
}

通过以上修改,你的代码应该能够正确地提取数字并打印出来。希望对你有帮助!如果还有其他问题,请随时提问。
Screenshot_20231030-204000_EDIT_1698669736011.png
Screenshot_20231030-203723_EDIT_1698669781211.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-30 20:53:22 | 显示全部楼层    本楼为最佳答案   
问题分析:
根据代码逻辑,你的目标是将输入的字符数组中的数字提取出来,并打印出来。但是在代码中存在一些问题,导致程序无法正确执行。

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

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

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

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

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

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

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

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

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

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

    return 0;
}

通过以上修改,你的代码应该能够正确地提取数字并打印出来。希望对你有帮助!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

爱了爱了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 15:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表