我一直在尝试让这段代码工作,但循环似乎不起作用?我对 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')
=
是一个赋值;您需要==
进行比较&&
表示“AND”;你需要||
,这意味着“OR”- 您可以使用
&&
或||
组合逻辑表达式,而不是常量
条件应该是
if (c == 'Y' || c == 'y' || c == 'N' || c == 'n')
另请注意,当您使用 %c
读取单个字符时,您的程序会“看到”所有字符,包括空格。这是一个问题,因为缓冲区中剩余的 '\n'
将在 Y
或 N
之前传递到您的程序。要解决此问题,请在格式字符串的 %c
之前添加一个空格:
scanf(" %c", &c)
// ^
// |
// Here
您的代码还会忽略它读取的第一个字符。我认为这不是故意的,因此删除循环之前的 scanf
调用。您还应该从循环中删除第二个 scanf
,只在循环 header 中保留对 scanf
的调用。
关于c - 如何在输入方面使用循环(C语言)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29589405/