Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中使用scanf()进行2个正确的输入_C - Fatal编程技术网

如何在C中使用scanf()进行2个正确的输入

如何在C中使用scanf()进行2个正确的输入,c,C,我有一个程序,它接受两种不同格式的输入,第一种是三角形的3个点(6个双数)的坐标,第二种是三角形每边的长度(3个双数) 第一种格式是:{[1.5;2],[3;4.2],[0.5;0.6]} 第二个可能是:{5,4.7,3.2} 我如何识别输入的是哪一个,而不明确地询问它并只进行一次扫描? 谢谢 您可以使用fgets和sscanf来满足您的需求 确保使用sscanf的格式说明符作为输入,即使缺少一个空格也会导致sscanf中止扫描 char buf[100]; double ptx1,pt

我有一个程序,它接受两种不同格式的输入,第一种是三角形的3个点(6个双数)的坐标,第二种是三角形每边的长度(3个双数)

第一种格式是:
{[1.5;2],[3;4.2],[0.5;0.6]}

第二个可能是:
{5,4.7,3.2}

我如何识别输入的是哪一个,而不明确地询问它并只进行一次扫描?
谢谢

您可以使用
fgets
sscanf
来满足您的需求

确保使用
sscanf
的格式说明符作为输入,即使缺少一个空格也会导致
sscanf
中止扫描

  char buf[100];
  double ptx1,pty1,ptx2,pty2,ptx3,pty3;
  double side1,side2,side3;

  fgets(buf,sizeof buf,stdin);

  int ret = sscanf(buf, " { [%lf; %lf ], [%lf;%lf], [ %lf ; %lf ] }", &ptx1,&pty1,&ptx2,&pty2,&ptx3,&pty3);

  if (ret < 6)
  {
      ret = sscanf(buf, " { %lf, %lf, %lf }", &side1,&side2,&side3);
      if (ret < 3) printf("wrong input\n");

      fgets(buf,sizeof buf,stdin);
      ret = sscanf(buf, " { [%lf; %lf ], [%lf;%lf], [ %lf ; %lf ] }", 
      &ptx1,&pty1,&ptx2,&pty2,&ptx3,&pty3);

      if (ret < 6) printf("wrong input\n");
  }
  else
  {
      fgets(buf,sizeof buf,stdin);
      ret = sscanf(buf, " { %lf, %lf, %lf }", &side1,&side2,&side3);
      if (ret < 3) printf("wrong input\n");
  }
charbuf[100];
双ptx1、pty1、ptx2、pty2、ptx3、pty3;
双面1,双面2,双面3;
fgets(buf、buf尺寸、标准尺寸);
int-ret=sscanf(buf,{[%lf;%lf],%lf;%lf],%lf;%lf]},&ptx1,&pty1,&ptx2,&pty2,&ptx3,&pty3);
如果(ret<6)
{
ret=sscanf(buf,{%lf,%lf,%lf},&side1,&side2,&side3);
如果(ret<3)printf(“输入错误”);
fgets(buf、buf尺寸、标准尺寸);
ret=sscanf(buf,“{[%lf;%lf],%lf;%lf],%lf;%lf]}”,
&ptx1、pty1、ptx2、pty2、ptx3和pty3);
如果(ret<6)printf(“输入错误”);
}
其他的
{
fgets(buf、buf尺寸、标准尺寸);
ret=sscanf(buf,{%lf,%lf,%lf},&side1,&side2,&side3);
如果(ret<3)printf(“输入错误”);
}

您可以与我们共享您的代码欢迎访问stackoverflow.com。请花些时间阅读,特别是命名和。也请和。最后请阅读。至于您的问题,
scanf
函数系列对于复杂输入或识别不同类型的输入不是很好。为此,我的建议是做一些研究。使用
fgets
然后使用
sscanf
。请先使用谷歌搜索或其他方法。你是班上第四个在12小时左右问这个问题的人。