0

我还是 C 的新手,正在尝试验证用户的输入。它必须采用'C' int int int 或'L' int int int 的形式。他们也可以根据需要输入任意数量。我测试第一个字符,然后取后面的 3 或 4 个整数 - 这些用于在其他函数中创建一些结构。我无法开始工作的地方是底部的 else 。我希望它拒绝任何不是 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) ;
      }
   }

非常感谢

4

2 回答 2

1

您可以考虑scanf使用 a%s而不是,%c然后解析结果字符串。原因是它scanf("%s", str)会自动忽略空格,但scanf("%c", char)会返回\n你不想要的空格字符。

scanf编辑:作为一个更一般的说明,正如一些评论中已经提到的,如果你只提取字符串、整数和浮点数(也许我忘记了一些东西),你不必担心在函数族中插入空格),因为这些函数在提取这些数据类型时都会忽略输入字符串中的空格。(除非用户另有说明,否则提取的字符串将始终不含空格。)

于 2013-11-06T00:19:41.563 回答
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();
}
于 2013-11-06T00:54:56.427 回答