如何在输入方面使用循环(在C语言中)



我一直在尝试让这些代码工作,但循环似乎不工作?我对C语言很陌生,我对这种语言的语法有点困惑。然而,我的循环并不像我希望的那样工作。我希望if和else语句能够工作,但无论输入是对是错,它总是输出"谢谢"。

#include <stdio.h>
#include <stdlib.h>
int confirm()
{
char c;
printf("Confirm (y/n): ");
scanf("%c", &c);
while (scanf("%c", &c))
{
if (c = 'Y' && 'y' && 'N' && 'n')
{
printf("nthank you");
break;
}
else
{
printf("nInput not recognised, try again. n");
printf("nConfirm (y/n): ");
scanf("%c", &c);
}
}
}
int main(int argc, char* agrv[])
{
confirm();
return 0;
}

当输出不正确时,它不会要求输入另一个输出。它只是不断地从if语句结束,因此循环没有运行?请帮忙。

您的循环没有任何问题,只是if语句出错了。

这段代码可以编译,但它不能做你想做的事情:

if (c = 'Y' && 'y' && 'N' && 'n')
  • =是一个赋值;你需要==来做比较
  • &&表示"与";你需要||,意思是"或">
  • 将逻辑表达式而非常量与&&||组合

条件应该是

if (c == 'Y' || c == 'y' || c == 'N' || c == 'n')

还要注意,当您使用%c读取单个字符时,您的程序会"看到"所有字符,包括空白字符。这是一个问题,因为缓冲区中剩余的'n'将在YN之前传递给您的程序。要解决此问题,请在%c之前添加一个空格到您的格式字符串:

scanf(" %c", &c)
//     ^
//     |
//    Here

您的代码还会忽略它读取的第一个字符。我认为这不是故意的,所以在循环之前删除对scanf的调用。您还应该从循环中删除第二个scanf,在循环头中留下对scanf的唯一调用。

int confirm()
{
char c;
printf("Confirm (y/n): ");
//scanf("%c", &c);//  <---------- needless
while (scanf("%c", &c)) //<----while loop will do `scanf("%c",&c)`, so previous line should be remove.
{
if (c == 'Y' || c == 'y' || c == 'N' || c == 'n')// <-  &&(AND); ||(OR). Also, be careful that don't be lazy, [c == 'Y' || 'y' || 'N' || 'n'] can't to communicate with computer
{
printf("nthank you");
break;
}
else
{
printf("nInput not recognised, try again. n");
printf("nConfirm (y/n): ");
scanf("%c", &c);
}
}
}

最新更新