如何在C中使用scanf()进行2个正确的输入
我有一个程序,它接受两种不同格式的输入,第一种是三角形的3个点(6个双数)的坐标,第二种是三角形每边的长度(3个双数) 第一种格式是:如何在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
{[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小时左右问这个问题的人。