while循环没有中断

while loop is not breaking

我无法找出以下代码行为不当的原因。这是一个简单的代码,用于接受字符,直到输入 * 或直到达到数组大小,然后打印从键盘读取的字符。看起来阅读部分还不错。此外,如果我在达到数组大小之前输入 *,则一切正常。但是,如果我不输入 * 并等到读取部分达到数组大小,我就会遇到麻烦。打印时它会打印读取的字符,但之后会打印一些垃圾。 运行 通过调试器,但当索引为 3 或更大时 while 循环不会中断。

int main()
{
    char myStr [3];
    unsigned int index=0;
    printf("Enter Single characters. Enter * to stop\n");
    do
    {
        scanf(" %c",&myStr[index]);
        index++;
    } while ((myStr[index-1]!='*')&&((index)<(sizeof(myStr)/sizeof(myStr[0]))));

    index=0;

    while ((myStr[index]!='*')&&(index<(sizeof(myStr)/sizeof(myStr[0]))))
   {
        printf("%c",myStr[index]);
        index++;
    }
    printf("\n");

    return(0);
}

您正在操作字符串, 需要以 null 结尾。 您应该使用 fgets(3) 获取字符串,然后使用 strlen(3) 获取长度。 然后你可以在你的字符串中移动 while (str[i] != '*' && i < strlen(str)) 祝你好运

代码在 printf 循环的最后一次迭代中遇到未定义的行为

    while ((myStr[index]!='*')&&(index<(sizeof(myStr)/sizeof(myStr[0]))))
    {
      ...

事实上它正在做

    while ((myStr[3] ....

myStr[3] 访问 myStr 越界。

要解决此问题,请执行以下操作:

    while ((index < (sizeof(myStr)/sizeof(myStr[0]))) && (myStr[index] != '*'))

Boolean short-circuiting 将处理 myStr[3] 未被执行的情况。