【问题标题】:How can I use fgets to scan from the keyboard a formatted input (string)?如何使用 fgets 从键盘扫描格式化的输入(字符串)?
【发布时间】:2013-08-25 05:58:05
【问题描述】:

我需要使用fgets 从键盘获取格式化输入(即格式为 13XXXX 的学号)。我知道scanf 是可能的,但我不太确定fgets。如何确保用户输入以13 开头的字符串?

printf ( ">>\t\tStudent No. (13XXXX): " );
fgets ( sNum[b], sizeof (sNum), stdin);

编辑: sNum 是学生编号的字符串。 谢谢。

【问题讨论】:

  • 你能再显示一些代码吗?什么是snum?通常你会想说 fgets(something, sizeof(something), stdin) 然后通常检查 fgets 的返回值。
  • @user814064 感谢您指出这一点。我已经编辑过了。

标签: c string fgets


【解决方案1】:

您对fgets() 的调用可能是错误的。

char line[4096];
char student_no[7];

printf(">>\t\tStudent No. (13XXXX): ");
if (fgets(line, sizeof(line), stdin) == 0)
    ...deal with EOF...
if (sscanf(line, "%6s", line) != 1)
    ...deal with oddball input...
if (strlen(student_no) != 6 || strncmp(student_no, "13", 2) != 0)
    ...too short or not starting 13...

您可以根据需要应用更多条件。例如,XXXX 应该是数字吗?如果是这样,您可以将字符串转换为int,可能使用strtol(),因为它告诉您第一个未转换的字符,您希望它成为字符串的终止空值。您还可以通过除以 10,000 并检查结果是否为 13 来验证数字是否为 13XXXX。您可能还想查看前 6 个非空白字符之后的内容(line 中剩下的内容)等。

【讨论】:

    【解决方案2】:

    使用 fgets 获取字符串,然后使用 sscanf 解释它。 %i 的格式字符串会将字符串解释为数字。 sscanf 的返回值将告诉您该解释是否成功(即用户输入了一个数字)。一旦你知道了,然后将这个数字除以 10,000。如果结果是 13,那么你知道输入的数字在 13x,xxx 范围内

    【讨论】:

      【解决方案3】:
      printf ( ">>\t\tStudent No. (13XXXX): " );
      fgets ( sNum[b], sizeof (sNum), stdin);
      

      sNum[b]应该是sNum,它是一个指针。

      并且在使用 fgets 从 stdin 获取一行后,您可以使用 regular expression:"^13.+" 检查该行。

      【讨论】:

        【解决方案4】:

        听起来您正在寻找fscanf

        int fscanf ( FILE * stream, const char * format, ... );

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-22
          • 2015-08-04
          • 2014-12-29
          • 2011-08-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多