【问题标题】:Segmentation fault(core dump) in While loopWhile循环中的分段错误(核心转储)
【发布时间】:2022-08-02 17:15:52
【问题描述】:

客观的:打印出 string[i] 到达字母表中的相同字符需要多长时间,

前任。 h = a, b, c, d, e, f, g, h =====> 长度 = 8(大写与否)

问题:分段错误(核心转储)

我尝试了什么:使用调试器。而不是在 string[i] = 8 中停止的 while 循环,它只是永远持续下去。

代码:

#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(void)
{
    string text = get_string(\"Text: \");
    int length = strlen(text);

        char alpha[26];
        char beta[26];
        int i;

        for (i = 0; i <= 25; i++)
        {
            alpha[i] = 65 + i;
            beta[i] = 97 + i;
        }

主要问题(我认为)

for (int z = 0; z <= length; z++)
            {
            while (text[z] != alpha[i] || text[z] != beta[i])
                {
                    i++;
                }
                printf(\"%i \", i);
            }
    }
  • while 循环终止的唯一方法是当 text[z] 同时两个都alpha[i]beta[i]。你想要&amp;&amp; 那里;不是||。或者,使用等效的否定表达式:while (!(text[z] == alpha[i] || text[z] == beta[i]))
  • @Whoz Craig 成功了,谢谢!!我也忘记了 i = 0。
  • for (int z = 0; z &lt;= length; z++) 很少有人真正想将&lt;= 用于循环条件。在这种情况下,最后一次迭代将读取字符串末尾的终止 0。不是崩溃的根源,但可能是不良行为。
  • 当代码运行时,您会发现 \'h\' 位于位置 7,而不是 8...记住基零索引...

标签: arrays c while-loop segmentation-fault coredump


【解决方案1】:

起初我猜你的代码不是用 C 语言编写的。您的问题是由while 循环条件引起的,而不是重置i 变量。 下面的代码经过测试。

#include <stdio.h>
#include <string.h>

int main(void)
{

    printf("Text: ");

    char text[100];

    scanf("%s", text);

    int length = strlen(text);

    char alpha[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char beta[26] = "abcdefghijklmnopqrstuvwxyz";

    for (int z = 0, i = 0; z < length; z++, i = 0)
    {
        while (!(text[z] == alpha[i] || text[z] == beta[i]))
        {
            i++;
        }

        printf("%i ", i + 1);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2015-06-25
    • 2021-06-03
    相关资源
    最近更新 更多