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

标签 c loops if-statement scanf

我一直在尝试让这段代码工作,但循环似乎不起作用?我对 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' 将在 YN 之前传递到您的程序。要解决此问题,请在格式字符串的 %c 之前添加一个空格:

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

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

关于c - 如何在输入方面使用循环(C语言)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29589405/

上一篇:不会添加 C 变量

下一篇:C从CMD获取输入

相关文章:

c# - 在 C/C++ 中重写 C# 代码的性能提升

c - 允许在信任边界进行冗余空指针检查

unix - Makefile 规则和 If 语句——如何实现?

loops - 从 Common Lisp 中的嵌套循环返回

loops - Perl循环标签算作GOTO吗?

php - 两个表值匹配等于一个值

javascript - JS 否则/否则如果

c - 如何使用 gdb 探索堆栈/堆?

c - 将可变参数列表转发到 c 中的 ncurses printw 函数

jquery - 循环中的 Clone AppendTo 函数会重载对服务器的请求 - 应该从缓存加载! (Jquery)