C:输入多次显示

时间:2016-02-02 02:41:35

标签: c

我正在编写一个程序,打印出一个特定宽度/高度的正方形或三角形,并且发生了一些非常奇怪的事情。如果我没有输入正确的字符来开始程序(S,T或Q),输入将再次显示,但会重复,这取决于我输入的字符数不正确。这是我的代码:

#include <stdio.h>
#include <ctype.h>

void print_square(int n, char c) {
for (int i=0; i < n; i++) {
    for (int j=0; j < n; j++) {
        printf("%c", c);
    }
    printf("\n");
}
}

void print_triangle(int n, char c) {
int count = 1;
for (int i=0; i < n; i++) {
    for (int j=0; j < count; j++) {
        printf("%c", c);
    }
    count = count + 1;
    printf("\n");
}
}

int main(int argc, const char * argv[]) {

int n;
char cmd;
char c;

do {

    printf("Enter T for a triangle, S for a square, "
           "Q to quit: ");
    scanf("%c", &cmd);
    cmd = toupper(cmd);

    if (cmd == 'S' || cmd == 'T') {
        printf("Enter the size: ");
        scanf("%d", &n);
        printf("Enter the character: ");
        scanf(" %c", &c);

        if (cmd == 'S') {
            print_square(n, c);
        }

        else {
            print_triangle(n, c);
        }
    }

} while (cmd != 'T' && cmd != 'S' && cmd != 'Q');

return 0;
}

知道造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

记住输入时你必须做一步:

1 - 输入字符

2 - 输入“Enter”,表示“\ n”

当您使用scanf(“%c”)时,它会将字符存储在cmd中。当您输入'a'时,您将按'a'并输入'\ n',a将存储在cmd中。 '\ n'将以堆栈形式存储。正如您所看到的,这与条件不匹配,因此循环发生并且步骤

printf(“输入T表示三角形,S表示正方形”,            “Q退出:”);

happend。 然后它将'\ n'存储在cmd中,因为以下是scanf(“%c”,cmd)。 它再次运行并再次循环。

我的建议是在这种情况下在scanf()之后使用getchar()。它会抛出不必要的'\ n'away。