在控制台中
当用户写“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');
}
答案 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
...
我不确定您是否理解或被允许使用fgets
和sscanf
,因此您可以使用其他方法:
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
}
代码的结构变得有点乱,但也许你会更喜欢这个......