【发布时间】:2017-03-19 20:10:16
【问题描述】:
我无法找出以下代码行为不当的原因。这是一个接受字符的简单代码,直到输入 * 或达到数组大小,然后打印从键盘读取的字符。看起来阅读部分很好。此外,如果我在达到数组大小之前输入 * 一切都很好。但是如果我不输入 * 并等到读取部分达到数组大小,我就有麻烦了。打印时会打印读取的字符,但之后会打印一些垃圾。运行调试器,但当 index 为 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);
}
【问题讨论】:
-
Sizeof mystr 是通过声明它 [3] 来修复的,也许?在那种情况下,您的商将不代表数组中实际字符的数量?
-
@JeremyKahan:在数组上执行
sizeof(myStr)/sizeof(myStr[0])完全可以计算元素的数量。 -
@alk 是的,但我担心无论用户是否输入三个元素,都会出现三个元素。但我现在明白这无关紧要,因为用户要么输入星星,要么必须输入 3。
-
注意:您可以使用 for() 循环来简化循环逻辑。
标签: c arrays while-loop do-while sizeof