Złe pobieranie scanf char

Złe pobieranie scanf char
A1
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:2
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 :)

Kopiuj
#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!

szweszwe
  • Rejestracja:ponad 11 lat
  • Ostatnio:7 dni
  • Lokalizacja:Kraków
  • Postów:1694
2

Spróbuj:

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

zamiast:

Kopiuj
 scanf("%c",&znak);
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Kraków
  • Postów:1055
1

Tak super-poprawnie byłoby:

Kopiuj
  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


do not code, write prose
edytowany 1x, ostatnio: pingwindyktator
A1
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:2
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.