鱼C论坛

 找回密码
 立即注册
查看: 1548|回复: 5

[已解决]课后作业s1e20第二题

[复制链接]
发表于 2021-4-20 22:03:18 | 显示全部楼层 |阅读模式

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

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

x
  代码中第二个for循环是我打算用来求最长和最短的句子用的,因为执行报错我删除了求最小的那一部分代码,不过代码还是执行不下去。  我在第二个for循环中加了打印数组a值,从执行结果来看似乎是在第5次循环的时候那个判断出了问题orz。
  后来我删除了其中的if语句,发现这个for不会报Segmentation fault--
  说了那么多,我想问一下这个循环里加的 if 报错的原因是什么?


最佳答案
2021-4-20 22:49:48
bingsha 发表于 2021-4-20 22:25
谢谢啦,不过我说的是它上面的那个for循环,给max赋值的那个,你说的这个我还没执行到就报错了。。。

我跑了下没什么问题啊,你试下吧
#include <stdio.h>

int main() {
        char str[5][128] = {0};
        int i, j = 0, max = 0, min = 128, a[5] = {0};


        for (i = 0; i < 5; i++) {
                printf("请输入%d句话:", i + 1);
                while ((str[i][j++] = getchar()) != '\n') {
                }
                a[i] = j - 1;//记录第i句话的字符数
                j = 0;
        }

        for (i = 0; i < 5; i++) { //求最长的一句话
                printf("%d\n", a[i]); //排查错误时候为了打印数组a用的
                if (a[i] >= max) {
                        max = a[i];
                }
        }

        printf("max=%d\n", max);

        /*printf("你输入了下边5句话:\n");
        for (i = 0; i < 5; i++) {
                for (j = 0; j < max; j++) {
                        printf("%c", str[i][j]);
                }
                printf("\n");
        }
        printf("其中最短的是:");
        printf("其中最长的是:");*/

}

这是代码部分

这是代码部分

这是执行情况,在第二个for循环结束的时候报错

这是执行情况,在第二个for循环结束的时候报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-20 22:09:32 | 显示全部楼层
第二张图片里显示的数字比每句话少一个字是因为我之前的代码中把数组少减了1造成的,后面改了还是报Segmentation fault
这是代码(还没写完)

#include <stdio.h>

int main()
{
    char str[5][128] = {0};
    int i, j = 0, max = 0, min = 128, a[5] = {0};


    for (i = 0; i < 5; i++)
    {
        printf("请输入%d句话:", i + 1);
        while ((str[i][j++] = getchar()) != '\n')
        {            
        }        
        a[i] = j - 1;//记录第i句话的字符数
        j = 0;
    }
   
    for (i = 0; i < 5; i++)//求最长的一句话
    {
        printf("%d\n", a[i]); //排查错误时候为了打印数组a用的      
        if (a[i] >= max)
        {
            max = a[i];
        }        
    }
   
    printf("你输入了下边5句话:");   
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < max; i++)
        {
            printf("%c", str[i][j]);
        }
        printf("\n");
    }
    printf("其中最短的是:");
    printf("其中最长的是:");

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

使用道具 举报

发表于 2021-4-20 22:22:04 | 显示全部楼层
  for (i = 0; i < 5; i++)
    {
        for (j = 0; j < max; i++)
        {
            printf("%c", str[i][j]);
        }
        printf("\n");
    }
循环写错了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-20 22:25:40 | 显示全部楼层
hunterac 发表于 2021-4-20 22:22
for (i = 0; i < 5; i++)
    {
        for (j = 0; j < max; i++)

谢谢啦,不过我说的是它上面的那个for循环,给max赋值的那个,你说的这个我还没执行到就报错了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-20 22:49:48 | 显示全部楼层    本楼为最佳答案   
bingsha 发表于 2021-4-20 22:25
谢谢啦,不过我说的是它上面的那个for循环,给max赋值的那个,你说的这个我还没执行到就报错了。。。

我跑了下没什么问题啊,你试下吧
#include <stdio.h>

int main() {
        char str[5][128] = {0};
        int i, j = 0, max = 0, min = 128, a[5] = {0};


        for (i = 0; i < 5; i++) {
                printf("请输入%d句话:", i + 1);
                while ((str[i][j++] = getchar()) != '\n') {
                }
                a[i] = j - 1;//记录第i句话的字符数
                j = 0;
        }

        for (i = 0; i < 5; i++) { //求最长的一句话
                printf("%d\n", a[i]); //排查错误时候为了打印数组a用的
                if (a[i] >= max) {
                        max = a[i];
                }
        }

        printf("max=%d\n", max);

        /*printf("你输入了下边5句话:\n");
        for (i = 0; i < 5; i++) {
                for (j = 0; j < max; j++) {
                        printf("%c", str[i][j]);
                }
                printf("\n");
        }
        printf("其中最短的是:");
        printf("其中最长的是:");*/

}

评分

参与人数 1鱼币 +5 收起 理由
bingsha + 5

查看全部评分

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

使用道具 举报

 楼主| 发表于 2021-4-20 23:10:25 | 显示全部楼层
hunterac 发表于 2021-4-20 22:49
我跑了下没什么问题啊,你试下吧

谢谢啦,我跑了没问题,看来还是下面那个写错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 15:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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