Proste zadanko-prostokąt

0

Witam, mam problem z prostym zadankiem w języku c, celem zadania jest wypisanie prostokąta na ekranie o wymiarach axb wprowadzonych z klawiatury z użyciem znaku który także ma być wprowadzony z klawiatury. Wszystko to ma być napisane za pomocą dwóch funkcji void linijka(int ileZnakow, char znak) oraz void prostokat(int szer,int wys,char znak) i jest jeszcze jedna mała uwaga że w funkcji prostokat() ma być wywoływana funckja linijka(). Napisałem coś takiego, tylko że nie wypisuje mi tego prostokąta:

 #include <stdio.h>
#include <stdlib.h>


void linijka (int ileZnakow, char znak)
{
     int i;
     
     for(i=1;i<=ileZnakow;i++)
     {
                              printf("%s",znak);
     }
}
void prostokat (int szer, int wys, char znak)
{
     int j;
     
     for(j=1;j<=wys;j++)
     {
                        linijka (szer,znak);
                        printf("\n");
     }
}

main()
{
      int a,b;
      char z;
      
      printf("Podaj wymiary prostokata:\nszerokosc:");
      scanf("%d",&a);
      printf("wysokosc:");
      scanf("%d",&b);
      printf("Podaj znak:");
      scanf("%s",&z);
      printf("\n");
      prostokat(a,b,z);
      
system("pause");    
return 0;
}
0

[1] printf("%s",znak) -- wypisujesz pojedynczy znak, a nie stringa, więc powinno być printf("%c", znak).
[2] scanf("%s",&z) -- wczytujesz pojedynczy znak, a nie stringa, więc powinno być scanf("%c", &z).

0

Zrobiłem tak na samym początku gdy się zabierałem za zadanie, ale jak mam %c to w ogóle mi nawet nie czeka na pobranie z klawiatury tego znaku tylko od razu wykonuje się system("pause").

0

Problem rozwiązany chociaż za bardzo nie wiem dlaczego tak, gdy zamieniłem miejscami,że najpierw zczytuje znak a potem wymiary prostokąta to działa.

0

Po wczytaniu a i b w buforze wejściowym zostaje jeszcze znak nowej linii po wciśnięciu entera, i właśnie on jest pobierany przez scanf(). Przed scanf("%c", &z) musisz opróżnić bufor wejścia:

printf("Podaj wymiary prostokata:\nszerokosc:");
scanf("%d",&a);
printf("wysokosc:");
scanf("%d",&b);
printf("Podaj znak:");
while ((z = getchar()) != '\n' && z != EOF); // <--- o, tutaj
scanf("%c",&z);
0

Program mógłby wyglądać tak:

#include<stdio.h>

void prostokat(int, int, int);
void linia(int, char);

int main(void) {
int szer, wys;
char znak;

printf("Podaj szerokosc: \n");
scanf("%d", &szer);
printf("Podaj wysokosc: \n");
scanf("%d%*c", &wys);
printf("Podaj znak: \n");
scanf("%c", &znak);
 
prostokat(szer, wys, znak);
  
return 0;    
}

void prostokat(int a, int b, int c) {
int i=0;     

for(i; i < b; i++) {
       linia(a,c);
       }
}

void linia(int a, char c) {
int i=0;     

for(i; i < a; i++) {
       printf("%c", c);
       }     
printf("\n");
}

Z czego wynikał Twój problem ze zmianą miejsc? Najprościej mówiąc po wczytywaniu liczby do bufora "wpadał" znak "\n".

0

Rozumiem, wielkie dzięki! Dodałem czyszczenie bufora i śmiga

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