【问题标题】:Incorrect comparison of three input characters三个输入字符的比较不正确
【发布时间】:2021-07-03 15:29:59
【问题描述】:

我有以下程序,它比较三个字符并输出它们的比较。

当我运行程序时,每当我输入三个整数时,只有最后一个 else(所有首字母都不同)语句在其条件下正确运行。但是,对于其他条件,只有最后一个 else if(第一个和最后一个首字母相同)运行。添加花括号后我也检查了它,但没有任何改变。

    #include<stdio.h>
    #include<stdlib.h>

    int main()
    {
    char ch1, ch2, ch3;

    printf("Enter 3 character values into ch1, ch2, and ch3: ");
    scanf("%c%c%c", &ch1, &ch2, &ch3);

    if(ch1==ch2)
    {
      if(ch2==ch3)
      printf("All initials are the same!\n");

      else
      printf("First two initials are the same!\n");
     }
 
    else if(ch2==ch3)
    {
    printf("Last two initials are the same!\n");
    }
  
    else if(ch1==ch3)
    {
    printf("First and last initials are the same!\n");
    }
  
  
    else
    {
    printf("All initials are different!\n");
    }
 
   
    system("pause");
    return 0;
    } 

【问题讨论】:

  • 程序正在比较 3 个字符,而不是 3 个整数。
  • 好的,谢谢。这只是一个写作错误。
  • 好的,那么您的输入、预期输出和实际输出是多少?
  • 哇。我不知道 if(或者甚至您认为与 which 相配)还有哪些其他情况 - 这几乎可以肯定是格式化您的代码将有助于找到问题的情况!
  • 您的代码对我来说很好......只要我不在输入的字母之间放置任何空格。如果这样做,则空格将被读取为输入字符。

标签: c if-statement dev-c++


【解决方案1】:

您发布的代码可以正常工作,只要您不在输入的首字母之间输入任何空白字符!(我使用AAA、AAB、@987654323 对其进行了测试@、ABB 和 ABC,都给出了正确的响应。)

但是,如果您要在首字母之间输入空格(即输入 A A B),那么空格字符将被读取为输入(这就是 %c 格式说明符的工作方式)所以,在这种情况下,三个首字母实际上是A、 和A——给出一个看似不正确的答案。

要在输入之间跳过(可选)空白字符,只需在每个 %c 格式说明符之间添加一个空格,如下所示:

scanf("%c %c %c", &ch1, &ch2, &ch3);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2015-03-10
    • 2020-09-16
    • 2016-01-03
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多