c - 如何修复 - 使用 getchar() 和 do-while 的意外输出

标签 c if-statement do-while logical-operators getchar

我正在尝试编写一个简单的代码,该代码将从输入中读取字符并执行“正确”或“错误输入”,然后再次运行代码,直到输入正确的输入。首先,它不适用于大写X。我想解决的另一个问题是,在输入错误后,我必须按回车键才能得到“Enter x”消息,而不是在输入错误消息后立即进入。

#include <stdio.h>
int main()
{
         do
         {
            printf("Enter x\n");
            if (getchar()=='x'|| getchar()=='X')
            {
            printf("Entered char is X\n");
            return 0;
            }
            else
            {
            printf("Input incorrect! Please try again!!!\n");
            }
         }
         while (getchar()!='x' || getchar()!='X');
     return 0;
 }

最佳答案

您需要将输入存储在变量中,否则每次 getchar 调用都会连续多次请求输入。

由于奇怪的历史原因,getchar 实际上返回一个 int,因为可以从它返回的值 EOF 是一个 int。所以变量必须是int

最后,每次用户按下 Enter 键时,一个不可见的换行符 \n 就会附加到输入流中。这个角色对你没有好处,所以你应该放弃它并额外阅读。

#include <stdio.h>

int main (void)
{
  int input;

  do
  {
    printf("Enter x\n");
    input = getchar();
    getchar(); // extra getchar to chew up line feed from stdin

    if (input=='x'|| input=='X')
    {
      printf("Entered char is X\n");
    }
    else
    {
      printf("Input incorrect! Please try again!!!\n");
    }
  } while (input!='x' && input!='X'); 

  return 0;
}

请注意 input=='x'|| 的反义词input=='X'input!='x' && input!='X' (德摩根定律)。 “如果输入不是‘x’并且输入不是‘X’则循环”。

关于c - 如何修复 - 使用 getchar() 和 do-while 的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55373857/

相关文章:

sql - WHERE 子句中的 If..Else 或 Case - 一些不同的东西

java - 如何在 while 循环内使用按钮的 Action 监听器?

c - 使用 qsort 对多个数组进行排序

C Tokenizer(当字段丢失时它也会返回空。耶!)

C char 数组 v C char* 初始化

c - 当我在 repl.it 中编译我的 C 程序时,它运行得很好,但 do/while 循环在代码块中不起作用

c - 如何从用户c获取输入整数

c - scanf返回值不符合预期

css - 如何使用 CSS if..else 来改变主体背景颜色

javascript - 如果元素具有特定的 CSS 值,请执行此操作