bingsha 发表于 2021-4-20 22:03:18

课后作业s1e20第二题

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


bingsha 发表于 2021-4-20 22:09:32

第二张图片里显示的数字比每句话少一个字是因为我之前的代码中把数组少减了1造成的,后面改了还是报Segmentation fault
这是代码(还没写完)

#include <stdio.h>

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


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

}

hunterac 发表于 2021-4-20 22:22:04

for (i = 0; i < 5; i++)
    {
      for (j = 0; j < max; i++)
      {
            printf("%c", str);
      }
      printf("\n");
    }
循环写错了吧

bingsha 发表于 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赋值的那个,你说的这个我还没执行到就报错了。。。

hunterac 发表于 2021-4-20 22:49:48

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

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

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


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

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

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

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

}

bingsha 发表于 2021-4-20 23:10:25

hunterac 发表于 2021-4-20 22:49
我跑了下没什么问题啊,你试下吧

谢谢啦,我跑了没问题,看来还是下面那个写错了
页: [1]
查看完整版本: 课后作业s1e20第二题