我正在尝试编写一个简单的演示程序,它将在输入指定字符时突破循环。我成功地做到了这一点,直到我想添加额外的条件,我没有超过我的阵列。当我输入指定的字符时,此代码不会突破循环,我无法弄清楚原因。代码的逻辑和设置似乎很合理!
#include <stdio.h>
char input[10];
char breakout = '!';
int idx;
int main(void)
{
printf("Input characters until %c character is used to break out", breakout);
for(idx = 0; input[idx] != breakout && idx < 10; idx++)
{
scanf("%c", &input[idx]);
}
printf("Program terminated:");
getchar();
return 0;
}
似乎for循环的条件应该在输入'!'时评估为false。性格,但事实并非如此。谢谢你们
答案 0 :(得分:2)
您正在输入字符之前测试条件,如果您使用do-while循环,则可以在
之后进行比较idx = 0;
do
{
scanf("%c\n", &input[idx]);
}
while( input[idx++] != breakout && idx < 10);
答案 1 :(得分:2)
考虑你的for循环条件。你的input[idx]
总是在查看数组中的下一个位置(它还没有包含一个字符) - 而不是从scanf调用中收到的前一个字符,可以在input[idx - 1]
找到。但是当然你不能在第一次迭代时检查input[idx - 1]
,所以要小心。
for(idx = 0; (idx == 0 || input[idx - 1] != breakout) && idx < 10; idx++)
{
...
}
循环条件的超复杂因素或多或少都不是一个好主意 - idx++
迭代步骤在评估条件之前发生并且可能令人困惑。在循环中使用do / while或中断条件。
答案 2 :(得分:1)
您应该在输入字符后测试条件。我修改了你的代码:
#include <stdio.h>
char input[10];
char breakout = '!';
int idx;
int main(void)
{
printf("Input characters until %c character is used to break out", breakout);
for(idx = 0; idx < 10; idx++)
{
scanf("%c", &input[idx]);
if(input[idx] == '!')
break;
}
printf("Program terminated:");
getchar();
return 0;
}