我还是C的新手,我正在尝试验证用户的输入。它必须是'C'int int int或'L'int int int int的形式。他们也可以根据自己的意愿输入。我测试第一个字符,然后使用3或4个后续的整数 - 这些用于在其他函数中创建一些结构。我无法工作的是底部的其他部分。我希望它拒绝任何不是l / L / c / C
的“类型”到目前为止我已经
了 counter = 0 ;
while ( type != '\n' )
{
scanf("%c", &type) ;
if ( type == 'L' || type == 'l')
{
scanf(" %d %d %d %d", &llx, &lly, &urx, &ury) ;
Line line = makeline(llx,lly,urx,ury) ;
shape = makeshapeline( line ) ;
box = makeboxshape( shape ) ;
counter++ ;
}
else if ( type == 'C' || type == 'c')
{
scanf(" %d %d %d", &x, &y, &rad) ;
Circle circle = makecircle(x, y, rad) ;
shape = makeshapecircle( circle ) ;
box = makeboxshape( shape ) ;
counter++ ;
}
else
{
printf("Invalid input\n") ;
return 0 ;
}
if (counter == 1)
{
boxfinal = box ; //On the first run initialise the final box to the first result
}
if (counter > 1)
{
boxfinal = makeboxbox( box, boxfinal) ;
}
}
非常感谢
答案 0 :(得分:1)
您可以考虑scanf
使用%s
而不是%c
,然后解析生成的字符串。原因是scanf("%s", str)
会自动忽略空格,但scanf("%c", char)
会返回空白字符,例如\n
,这是您不想要的。
编辑:作为更一般的注释,正如已经在一些评论中提到的那样,如果你只提取字符串,整数和浮点数,你不必担心在scanf
函数族中插入空格。 (也许是我忘了的东西),因为这些函数在提取这些数据类型时都会忽略输入字符串中的空格。 (除非用户另有指定,否则提取的字符串将始终没有空格。)
答案 1 :(得分:0)
建议fgets()/sscanf()
char buf[100];
while (fgets(buf, sizeof(buf), stdin) != NULL) {
if (4 == sscanf(buf, "%*1[Ll]%d%d%d%d", &llx, &lly, &urx, &ury) {
do_line();
else if (3 == sscanf(buf, "%*1[Cc]%d%d%d", &x, &y, &rad) {
do_circle();
else
do_Invalid_input();
}