显示星号与使用功能显示字符

时间:2018-11-13 14:15:01

标签: c scanf

我编写了一个函数(asterisksDisplay),该函数显示一个由星号组成的实心矩形,其边在整数参数中指定为rowcolumn,这些参数是从用户那里获取的。下面的程序运行完美。

#include <stdio.h>

void asterisksDisplay (int row, int column);

int main (void)
{
    int a=0;
    int b=0;
    printf("Please enter sides of your shape: ");
    scanf("%d%d", &a, &b);
    printf("\nYour shape is: \n");
    asterisksDisplay(a, b);
}

void asterisksDisplay (int row, int column)
{
    for (int i = 1; i <= row; i++) {
        for (int p = 1; p <= column; p++) {
            printf("*");
        }
        printf("\n");
    }
 }

当我尝试将星号的此功能修改为给定字符显示的用户功能时,编译器会以某种方式跳过显示字符。

#include <stdio.h>

void asterisksDisplay (int row, int column, char character);
int main (void)
{
    int a=0;
    int b=0;
    char c;
    printf("Please enter sides of your shape: ");
    scanf("%d%d", &a, &b);
    printf("\nplease enter the character to be filled: ");
    scanf("%s", &c);
    printf("\n");
    asterisksDisplay(a, b, c);
}

void asterisksDisplay (int row, int column, char character)
{
    for (int i = 1; i <= row; i++) {
        for (int p = 1; p <= column; p++) {
            printf("%c", character);
        }
        printf("\n");
    }
}

解决此问题的方法是什么?

1 个答案:

答案 0 :(得分:1)

更改

 scanf("%s", &c);

 scanf(" %c", &c);
          ^^-----------------------(i)
       ^^------------------------- (ii)
  • 将转换说明符从%s更改为%c,如(i):因为cchar类型。

  • 我们需要对之前输入的换行符进行转义,因此转换说明符之前的多余空格将匹配并丢弃缓冲区中存在的所有前导空白输入。