使用scanf和'%d'

时间:2016-02-12 05:46:01

标签: c char int scanf

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

-2 cdefg

输出将是

abcde

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你不需要区分它们。 N总是在字符串之前,所以只需使用适当的格式读取它们。

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

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