【问题标题】:Detect two type of input in C在C中检测两种类型的输入
【发布时间】:2021-10-28 05:12:48
【问题描述】:

假设我有两种类型的查询 一个是 1 2 3 另一个是 2 3

如果头部(索引 0)为 1,则输入中的总数为 3 (1 2 3) 如果头部为 2,则输入中的总数为 2 个数字 (2 9)

如何检测它?谢谢

我遇到的问题是我扫描了其中的 3 个 scanf("%d %d %d",&a,&b&c)

所以,当我在输入 (2 3) 中只有 2 个数字时,程序将不会继续

谢谢

【问题讨论】:

  • 可以多次致电scanf,知道吗?调用一次以获得第一个号码,然后基于此以正确的格式再次调用它。 TBH 更好的方法是 fgets 读取该行,然后 sscanf 解析整数。 sscanf 的返回值会告诉你有多少数字被成功解析。
  • 请解释“程序不会继续”,我对此表示怀疑。我认为需要minimal reproducible example 来演示它。
  • 请看stackoverflow.com/questions/69711230/… 我差点以为是重复的。

标签: c


【解决方案1】:

您使用scanf() 的返回值来检测这一点,并且您通常应该始终检查返回值。它们是有目的的。

#include <stdio.h>

int main(void) {
    int a;
    int b;
    int c;

    printf("Please enter 2 or 3 numbers: ");
    int n = scanf("%d%d%d", &a, &b, &c);
    switch (n) {
    case 2:
        printf("You have entered 2 numbers, %d and %d\n", a, b);
        break;
    case 3:
        printf("You have entered 3 numbers, %d, %d and %d\n", a, b, c);
        break;
    default:
        printf("Well, you made an error.\n");
        break;
    }
}

注意 1:即使 printf() 返回一个值,通常是打印的字符数。在这个简单的例子中,我们可以忽略它。

注意 2:如果您不详细了解所使用的函数,最好阅读文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 2017-02-01
    • 2022-01-09
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多