Złe pobieranie scanf char

0

Witam, napisałem taki oto program który tworzy prostokąt, w którym na koniec wybieramy czy ma być wy0pełniony, chciałbym żeby mozna było go wypełnić dowolnym znakiem, jednakże gdy tylko wpisuję znak jakim ma być wypełniony cały prostokąt się rozwala. Nie wiem czy o czymś zaponiałem czy po prostu znaku nie da się wykorzystać w pętli... Oto mój program, dodam jeszcze, że jeżeli zmienną zadeklaruję jako int to prostokąt ładnie się wypełnia cyferkami. Proszę o pomoc :)

#include <stdio.h>
main(void)
{
int lewa, wysokosc, szerokosc, gora, a, b, x, y, c, d, wypelnienie, znak1;
char znak;

printf("Podaj odleglosc od lewej krawedzi:");
scanf("%d",&lewa);
printf("Podaj odleglosc od gory:");
scanf("%d",&gora);
printf("Podaj szerokosc prostokata:");
scanf("%d",&szerokosc);
printf("Podaj wysokosc prostokata:");
scanf("%d",&wysokosc);
printf("Czy prostokat ma byc wypelniony czy pusty?\nJesli tak to 1\nJesli nie to 0\n");
scanf("%d",&wypelnienie);
if (wypelnienie==1)
{
printf("Podaj znak wypelnienia:");
scanf("%c",&znak);
for(a=gora;a>0;a--) // odleglosc od gory
{
    printf("\n");
}
for(b=lewa;b>0;b--) // spacje do X
{
    printf(" ");
}
for(x=szerokosc+2;x>0;x--)// Obramowka z X
{
    printf("X");
}
printf("\n");
for(y=wysokosc-2;y>0;y--) // wysokosc srodka
{
    for(b=lewa;b>0;b--)
    {
        printf(" ");

    }
    printf("X"); //lewa sciana
    for(x=szerokosc;x>0;x--) // szerokosc wnetrza
    {
        printf("%c", znak);
    }
    printf("X");
    x=szerokosc;
    printf("\n");
}
for(b=lewa;b>0;b--) // spacje
{
        printf(" ");

}
for(x=szerokosc+2;x>0;x--)
{
    printf("X"); // prawa sciana
}
printf("\n");
return 0;
}

else if(wypelnienie==0)
{
 for(a=gora;a>0;a--)
{
    printf("\n");
}
for(b=lewa;b>0;b--) // spacje
{
    printf(" ");
}
for(x=szerokosc+2;x>0;x--)
{
    printf("X");
}
printf("\n");
for(y=wysokosc-2;y>0;y--) // wysokosc
{
    for(b=lewa;b>0;b--) // spacje
    {
        printf(" ");

    }
    printf("X");
    for(x=szerokosc;x>0;x--)
    {
        printf(" ");
    }
    printf("X");
    x=szerokosc;
    printf("\n");
}
for(b=lewa;b>0;b--) // spacje
{
        printf(" ");

}
for(x=szerokosc+2;x>0;x--)
{
    printf("X");
}
printf("\n");

return 0;
}

else
{
printf("Podales zla wartosc!\n");
return 0;
}

}
 

Z góry wielkie dzięki za pomoc, pozdrawia, Arek!

2

Spróbuj:

 scanf(" %c",&znak);

zamiast:

 scanf("%c",&znak);
1

Tak super-poprawnie byłoby:

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

Otóż chodzi o to, ze wcześniej wczytujesz inta i naciskasz ENTER. Ten ENTER właśnie zostaje wczytany do zmiennej znak. Wiec zapis, ktory podałem oznacza:
-wczytaj sobie enter (czy tam jakikolwiek bialy znak)
-a teraz wczytaj sobie znak

0

Wielkie dzięki Panowie za rozwiązanie problemu i wyjaśnienie! Pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1