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