【问题标题】:How to differ an int and a char when using scanf and '%d'使用 scanf 和 '%d' 时如何区分 int 和 char
【发布时间】:2016-05-23 04:35:16
【问题描述】:

我正在编写一个程序,将字符串的字母在字母表中按特定方向旋转。它需要一个整数的初始输入,我将其称为 N,然后使用该整数作为每个字符将在字母表中移动的字母数。正整数向右移动,负整数向左移动。例如,如果输入是:

-2 cdefg

输出将是

abcde

为了做到这一点,我需要区分常规字母字符和整数,以获得初始的N。我已经尝试将 scanf() 与 %d 和 isalpha() 函数以及 %c 和 isdigit() 函数一起使用,但两者似乎对我都有障碍。澄清一下,我只是对初始变量 N 有问题。我不知道如何区分整数之间的“m”输入之间的区别。据我了解,它将为 N 存储 'm' 的 ASCII 值。

【问题讨论】:

  • 要读取整数,请使用“%d”。要读取字符,请使用“%c”。您必须提前决定是否希望阅读其中之一。同一个字符串“2”可以解析为整数或字符,但结果却大不相同。

标签: c char int scanf


【解决方案1】:
  1. 读入整行文本并将其存储在数组中。为此,您可以使用 fgets 或 - 如果有的话 - getline
  2. 然后使用strtol 将该行的第一个“单词”转换为数字。它会告诉您停止解析的位置end
  3. 只要 end 指针取消对空白的引用,就前进(您可以通过 isspace 进行检查)。
  4. 现在您处于需要旋转的第一个字符的位置。继续直到字符串结束。

【讨论】:

    【解决方案2】:

    你不需要区分它们。 N 始终位于字符串之前,因此只需使用适当的格式读取两者即可。

    scanf("%d %s", &n, string);
    

    要判断用户输入是否正确,请检查scanf 返回的值。它返回成功转换的项目数。如果用户没有先输入整数,%d 转换将失败,因此将返回0。如果用户在字符串之前输入了一个有效的整数,它将返回2

    【讨论】:

    • 我正在尝试区分 N 的不同输入类型。如果用户要输入“m”而不是整数,我不确定如何将其与常规整数区分开来。如果我使用 isdigit(),它会忽略所有大于 9 的数字和所有负数,它们都对 N 有效。
    • 这只会导致转换失败。检查scanf 的返回值。如果不是 2,则表示用户输入的格式不正确。
    猜你喜欢
    • 1970-01-01
    • 2014-05-30
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多