用Scanf取char和整数

时间:2014-11-05 18:02:02

标签: c

在控制台中

当用户写“S 4”时,它必须出现4x4平方

当“R 4 6”==> 4x6矩形

当“T D 4”==>矩形右对齐

当“T U 4”===> x轴反射三角形

我怎样才能使用scanf格式? 形状很简单,但我不能做scanf部分

这正是我想要的: http://i.imgur.com/oGNoKRn.jpg

我的所有代码: 实际上在开关部分,TU,TD不被接受

int main() {
printf("Enter a valid type\n ");
char shape;
int row,col,i,j;
do{
scanf(" %c %c %c",&shape,&row,&col);
switch(shape){
case 'R':
    for(i=0; i<row; i++){
        for(j=0; j<col; j++){
            printf("*");
        }
        printf("\n");
    }break;
case 'S':
    for(i=0; i<row; i++){
        for(j=0; j<row; j++){
                printf("*");
        }
        printf("\n");
    }break;
case "TU":
    for(i=0; i<row; i++){
        for(j=0; j<row; j++){
            if(i+j==row)
                printf("*");    
            else
                printf(" ");
        }
        printf("\n");
    }break;
case "TD":
    for(i=0; i<row; i++){
        for(j=0; j<row; j++){
            if(i+j!=row)
                printf("*");    
            else
                printf(" ");
        }
        printf("\n");
    }break; 

        }
 }while(shape!='E');
    }

1 个答案:

答案 0 :(得分:2)

您不能使用一条scanf行输入所有命令,因为不同的命令具有不同的格式。请执行以下任一操作:

  • 阅读一行文字;尝试多次解析它(我更喜欢这个)
  • 读第一个字;根据其值读取命令的其余部分

要实现第一个,您可以使用scanf的返回值,正如多人建议的那样。如果scanf成功,则返回已知编号(有关详细信息,请查看文档)。如果失败,您可以使用相同的输入和不同的格式字符串再次尝试

char command[80]; // let's hope no one tries to input more than 78 characters...
...
fgets(command, sizeof(command), stdin);
if (sscanf(command, " S %d", &size) == 1) // try to read a command starting with "S"
{
    // whatever
}
else if (sscanf(command, " R %d %d", &row, &col) == 2) // try to read a command starting with "R"
{
    // whatever else
}
else
...

我不确定您是否理解或被允许使用fgetssscanf,因此您可以使用其他方法:

scanf(" %c", &shape); // read just the shape type
switch (shape)
{
case 'T': // triangle? which one?
    scanf(" %c", &dir); // read the direction of the triangle
    switch (dir)
    {
    case 'U':
        scanf("%d", &size); // read just the size of the triangle
        ... // do your stuff
    }
case 'S': // whatever
}

代码的结构变得有点乱,但也许你会更喜欢这个......