循环重复自己?
Loop repeating itself?
我目前正在尝试自学 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;
}
我的问题如下: 为什么当我输入例如'M'作为我的答案时,它会自己循环两次;但是,如果给定适当的条件,则正确终止。
此外,我应该将响应转换为单个长度的数组,然后尝试以某种方式比较它,而不是 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;
}
当你输入M
时,你并不是真的只输入了M
;您正在输入 M
后跟一个换行符。所以当你第一次调用它时 getchar(3)
会 return M
,然后在第二次调用时它会 return \n
。因此循环执行两次。
您可以使用 scanf(" %c", &response)
捕获输入并忽略空格(换行符、制表符、空格等)。注意格式字符串中的前导空格;需要强制 scanf(3)
跳过空白。
此外,前两个 if 中的这些语句也是无用的:
continueLoop == false;
您将 continueLoop
与 false
进行比较,然后丢弃结果(如果您没有使用 -Wall
进行编译,您应该这样做,因为这很可能会给您一个警告) .
您可能想要赋值而不是比较:
continueLoop = false;
你的代码有几个错误。
首先,如果您想重复某些内容 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;
}
最好使用 scanf("%c",&ch);
而不是 getchar()
,因为它会 return '\n' 第二次调用 .否则其他代码看起来不错。
因为,我的一位朋友指出 scanf 的相同行为是相同的。然后你可以使用 getc
c = getc(stdin);
我目前正在尝试自学 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;
}
我的问题如下: 为什么当我输入例如'M'作为我的答案时,它会自己循环两次;但是,如果给定适当的条件,则正确终止。
此外,我应该将响应转换为单个长度的数组,然后尝试以某种方式比较它,而不是 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;
}
当你输入M
时,你并不是真的只输入了M
;您正在输入 M
后跟一个换行符。所以当你第一次调用它时 getchar(3)
会 return M
,然后在第二次调用时它会 return \n
。因此循环执行两次。
您可以使用 scanf(" %c", &response)
捕获输入并忽略空格(换行符、制表符、空格等)。注意格式字符串中的前导空格;需要强制 scanf(3)
跳过空白。
此外,前两个 if 中的这些语句也是无用的:
continueLoop == false;
您将 continueLoop
与 false
进行比较,然后丢弃结果(如果您没有使用 -Wall
进行编译,您应该这样做,因为这很可能会给您一个警告) .
您可能想要赋值而不是比较:
continueLoop = false;
你的代码有几个错误。
首先,如果您想重复某些内容 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;
}
最好使用 scanf("%c",&ch);
而不是 getchar()
,因为它会 return '\n' 第二次调用 .否则其他代码看起来不错。
因为,我的一位朋友指出 scanf 的相同行为是相同的。然后你可以使用 getc
c = getc(stdin);