我目前正在尝试自学C,因为我相信这将成为C ++和C#的一个很好的障碍(以及在课程开始之前获得一个先机)。所以我决定在这里写这个循环:
#include <stdio.h>
int main()
{
bool continueLoop = true;
char response;
printf("ARE YOU READY TO RUMBLE?!?!\n Y/N\n");
response = getchar();
int counter = 0;
do
{
counter++;
if (response == 'Y')
{
printf("AWESOME!");
continueLoop == false;
return 0;
}
else if (response == 'N')
{
printf("YOU FAIL!");
continueLoop == false;
return 0;
}
if (continueLoop == true)
{
printf("I do not understand your input!\n");
printf("Please reinput! Y/N\n");
response = getchar();
}
if(counter == 5)
{
printf("Exiting!");
continueLoop == false;
goto exit;
}
}while (continueLoop == true);
exit:
return 0;
}
我的问题如下:如果我输入例如&#39; M&#39;作为我的答案,它将循环两次;但是,如果它被给予适当的条件,那么正确终止。
此外,我应该将响应转换为单个数组长度,然后尝试以某种方式对其进行比较,而不是getchar()
,或者应该通过printf语句将其作为printf("ARE YOU READY TO RUMBLE?!? \n %s", response);
如果有帮助,我使用C-Lion作为我的IDE,因为我拒绝在vi,emacs或记事本中编写任何代码。
已编辑的代码
int main()
{
char response;
printf("ARE YOU READY TO RUMBLE?!?!\n Y/N\n");
scanf(" %c", &response);
int counter = 0;
while (counter < 5)
{
counter++;
if (response == 'Y')
{
printf("AWESOME!");
return 0;
}
else if (response == 'N')
{
printf("YOU FAIL!");
return 0;
}
else
{
printf("I do not understand your input!\n");
printf("Please reinput! Y/N\n");
response = getchar();
}
}
return 0;
}
答案 0 :(得分:3)
当您输入M
时,您实际上并没有真正输入M
;您输入M
后跟换行符。因此getchar(3)
会在您第一次调用时返回M
,然后在第二次调用时返回\n
。因此循环执行两次。
您可以使用scanf(" %c", &response)
捕获输入并忽略空格(换行符,制表符,空格等)。注意格式字符串中的前导空格;需要强制scanf(3)
跳过空白。
前两个if中的这些陈述也是无用的:
continueLoop == false;
您将continueLoop
与false
进行比较然后抛弃结果(如果您没有使用-Wall
进行编译,那么您应该这样做,因为这很可能会给您一个警告)。< / p>
你可能想要分配而不是比较:
continueLoop = false;
答案 1 :(得分:-1)
最好使用scanf("%c",&ch);
代替getchar()
,因为它会返回&#39; \ n&#39;第二次打电话的时候。否则其他代码看起来很好。
正如,我的一位朋友指出scanf的相同行为是一样的。然后你可以使用getc
c = getc(stdin);
答案 2 :(得分:-2)
您的代码中有几处错误。
首先,如果您想重复N
次,请使用for
循环,而不是while
。
其次,如果你想提前中断循环,请尝试使用break
而不是布尔值。
最后将冗余更改为布尔值为false然后return 0;
,因为您正在退出该函数。
int main()
{
char response;
int i=0;
for (i=0; i<5; i++)
{
printf("ARE YOU READY TO RUMBLE?!?!\n Y/N\n");
response = getchar();
if (response == 'Y' || response == 'y')
{
printf("AWESOME!");
break;
}
else if (response == 'N' || response == 'n')
{
printf("YOU FAIL!");
break;
}
else
{
printf("I do not understand your input!\n");
}
}
return 0;
}