字符的第二次扫描不起作用

时间:2016-01-17 19:02:08

标签: c scanf

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

void trinanguloNumeros(){
    char caracter = 'y';
    int iTamano;

    while (caracter == 'Y' || caracter == 'y') {
        printf("Realizar triangulo:\n");
        printf("De que tamaño desea su triangulo? [1-20]");
        scanf("%i", &iTamano);

        int i,j;
        for(i=1; i<= iTamano; i++ ){
            for(j=1; j <= i; j++){
                printf("%i", j);
            }
            printf("\n");
        }

        printf("Desea Intentar nuevamente? [y/n]\n");
        scanf("%c", &caracter);
        printf("%c", caracter);

    }
    printf("Termina!!");
}

int main(void){
    trinanguloNumeros();
    return 0;
}

var scanf的第二个caracter不起作用,并且会中断while循环。我不知道为什么这会打破循环并且不再设置变量。

3 个答案:

答案 0 :(得分:5)

space前放置一个%c,以防止scanf读取前一个newline缓冲区中的scanf

scanf(" %c", &caracter);     // see the added space?

space消耗输入缓冲区中剩余的所有空白。对于%d%s格式,它会自动生成,但不会采用%c格式。

答案 1 :(得分:0)

那是因为\n仍然在缓冲区中。您可以fflush(stdin);但我不建议您这样做,因为未定义的行为。相反,你可以在%c之前放置一个空格,这样就可以了。

答案 2 :(得分:0)

这是因为scanf在读取第一个值后将新行字符留在缓冲区中。因此,while循环中断。

 scanf("\n%c", &caracter);

这可以解决您的问题。