c - 为什么我按 's' 和 'u' 都得不到正确答案?

标签 c debugging

<分区>

我正在写一个简单的程序,通过C语言的第一个字母来判断日期。我在调试时遇到了一些麻烦。感谢所有看到并提前回答问题的人。

#include<stdio.h>
int main(void)

{
//Sunday  Monday Tuesday Wednesday Thursday Friday Saturday 

char letter;
printf("Input the first letter.\n");
scanf("%c",&letter); 

switch(letter)
{
    case 's': printf("Please in put the second number:\n");
          if(getchar()=='u')
              printf("It's Sunday\n");
          else if(getchar()=='a')
              printf("It's Saturday\n");
          else 
              printf("Input wrong!\n");             
          break;
    case 'm': printf("It's Monday\n");
          break;
    case 't': printf("Please in put the second number\n");
          if(getchar()=='u')
              printf("It's Tuesday\n");
          else if(getchar()=='h')
              printf("It's Thursday\n");
          else 
              printf("Input wrong!\n");             
          break;
    case 'w':  printf("It's Wednesday.");
           break;
    case 'f':  printf("It's Friday.  "); 
           break;
    default : printf("You input the wrong letter \n");
}
return 0;
}

最佳答案

让我们看一下您的代码块:

      if(getchar()=='u')
          printf("It's Sunday\n");
      else if(getchar()=='a')
          printf("It's Saturday\n");
      else 
          printf("Input wrong!\n");             
      break;

下面是该代码的执行方式:

  1. getchar() 将被调用,我们会将其与 'u' 进行比较。让我们假设失败。这意味着我们已经从输入键盘中​​消耗了一个字符。
  2. getchar()再次 调用并与'a' 进行比较!

取而代之的是,你可能想要这样的东西:

      int c = getchar();
      if(c == 'u')
          printf("It's Sunday\n");
      else if(c == 'a')
          printf("It's Saturday\n");
      else 
          printf("Input wrong!\n");             
      break;

现在,您仍然会遇到其他问题,因为在您的 scanf() 之后,输入流中的下一个字符将是 '\n' .

要解决这个问题,请对输入的第一个和第二个字符使用 scanf("%c", &letter)

关于c - 为什么我按 's' 和 'u' 都得不到正确答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23326159/

相关文章:

如果控制台打开,Javascript 运行得更快

java - 使用 am 实用程序在 Android 方法分析中缺少方法

c# - 在 Visual Studio 中添加没有完整命名空间的监视

C: 使用 fwrite 将 char 写入不同的行

c - 在 C 程序执行期间读取文件,并将所有商品及其各自的价格存储在结构商品数组中

c - 一次释放多个动态分配的内存可以吗?

visual-studio - Visual Studio 不会调试到引用的 DLL(来自同一解决方案)

c - 结构成员与 _Alignas 对齐

c - STM32F103x_XL 闪存组 2 保持忙碌状态

debugging - 如何调试 Gradle build.gradle 文件(在调试器中,带有断点)?