我一直在尝试让这些代码工作,但循环似乎不工作?我对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'
将在Y
或N
之前传递给您的程序。要解决此问题,请在%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);
}
}
}