【问题标题】:loop is running 5 times but asking for input only 2 times循环运行 5 次,但只要求输入 2 次
【发布时间】:2021-12-30 05:02:06
【问题描述】:

这是我的代码,每次循环运行时我都会输入 char

我提供了 5 个输入,但它只响应其中的 2 个。

#include <stdio.h>

int main()
{
    int t;
    scanf("%d",&t);
    while (t--)
    {
        char c;
        scanf("%c",&c);
        if(c =='b' || c== 'B')
            printf("BattleShip\n");
        else if(c=='c' || c=='C')
            printf("Cruiser\n");
        else if(c == 'd' || c=='D')
            printf("Destroyer\n");
        else if(c=='f' || c=='F')
            printf("Frigate\n");
    }
}
Input:
5 
b f c b f

Output:
BattleShip
Frigate

【问题讨论】:

  • 您在c 中收到的输入是什么?输出它的整数值(printf("%d\n", (int)c);),只是为了避免看不到空格或换行符的问题。顺便说一句,作为这里的新用户,也请带上tour 并阅读How to Ask(尽管您的问题没有有典型的初学者错误)。

标签: c loops input


【解决方案1】:

问题在于循环中的“scanf”函数。 char %c 标识符读取 \n 作为输入,如果您使用: scanf("%c", &amp;c) 如果你这样写: scanf(" %c", &amp;c) 你的问题解决了。

【讨论】:

    【解决方案2】:

    问题是scanf("%c", &amp;c)只读取一个字符,但是输入的字母之间有空格,空格也是ascii字符。引起问题的是空格,而不是5 之后的换行符(\n)。 你可以使用scanf(" %c", &amp;c),在%c之前有一个空格,这样scanf 无论如何都忽略空格和换行符等空白字符 他们很多。即使您放置了很多空格,此解决方案也有效 在您的输入之间。

    【讨论】:

      【解决方案3】:

      你的代码没有问题 尝试任何其他编译器。 有时这种类型的问题在更改编译器后会解决

      【讨论】:

      • 如果可行,这似乎是未定义行为的一个很好的指示,这与“代码中没有问题”相反。
      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2013-09-05
      • 2011-11-02
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多