首页 > 解决方案 > 用逗号读取输入(使用 sscanf)

问题描述

标签: cinputscanf

解决方案


添加到答案。您的格式字符串缺少实际的,逗号,因此1,2,3,4无法匹配。

你可以做这样的事情

#include <stdio.h>

int main()
{
  char input[60];
  char a1[2], a2[2], a3[2], a4[2];


  printf("Enter info");
  fgets(input, 60, stdin);
  if (4 != sscanf(input,"%1[^,\n], %1[^,\n], %1[^,\n], %1[^,\n]", a1, a2, a3, a4))
    return printf("Error"), 1;

  printf("%c %c %c %c", a1[0], a2[0],a3[0], a4[0]);
  return 0;
}

请注意错误检查sscanf是否成功,它应该返回它填充数据的变量数。如果有效,它必须是 4。

更改参数的数组大小和格式字符串%中的数字sscanf以符合您的需要。

编辑:如果输入有太多参数,要让它抛出错误,你可以这样做

#include <stdio.h>

int main()
{
  char input[60];
  char a1[2], a2[2], a3[2], a4[2];
  char temp[2];

  printf("Enter info");
  fgets(input, 60, stdin);
  if (4 != sscanf(input,"%1[^,\n], %1[^,\n], %1[^,\n], %1[^,\n] %1[^\n]", a1, a2, a3, a4, temp))
    return printf("Error"), 1;

  printf("%c %c %c %c", a1[0], a2[0],a3[0], a4[0]);
  return 0;
}

通过添加%1[^\n]到格式的末尾sscanf将尝试在四个参数之后读取另一个非空白字符。如果成功,则意味着 ex: 的输入中有太多参数1,2,3,4,5。它将返回 5,这是它能够填充的数据数。但是,如果输入有效,则最后一个格式说明符不应匹配任何内容,因此如果输入有效,sscanf则应准确返回 4。


推荐阅读