【发布时间】: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]。你想要&&那里;不是||。或者,使用等效的否定表达式:while (!(text[z] == alpha[i] || text[z] == beta[i])) -
@Whoz Craig 成功了,谢谢!!我也忘记了 i = 0。
-
for (int z = 0; z <= length; z++)很少有人真正想将<=用于循环条件。在这种情况下,最后一次迭代将读取字符串末尾的终止 0。不是崩溃的根源,但可能是不良行为。 -
当代码运行时,您会发现 \'h\' 位于位置 7,而不是 8...记住基零索引...
标签: arrays c while-loop segmentation-fault coredump