#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
循环。我不知道为什么这会打破循环并且不再设置变量。
答案 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);
这可以解决您的问题。