nie działająca pętla do...while w C

markez444
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 31 paź 2009, o 16:49
Płeć: Mężczyzna
Lokalizacja: Podlaskie
Podziękował: 7 razy

nie działająca pętla do...while w C

Post autor: markez444 »

Witam
Mam do Was zapytanie jak wykonać pętlę do...while na tym zadanku (kod podaję niżej) gdyż próbowałem wszystkiego ale chyba coś nie tak wpisuję w kodzie że nie chce to działać. Poza tym w pętli tej musi się znaleźć zapytanie dla użytkownika cytuję "Czy chcesz jeszcze raz? 0 - nie 1 - tak"
oto kod programu(bez pętli):

Kod: Zaznacz cały

int main()
{
 int x,i,liczba_znakow = 1; char znak;

    printf("Podaj znak i liczbe nieparzysta: ");
    scanf("%c %d",&znak,&x);
    printf("
");
                    int liczba_spacji = x/1 - 1;
                    for( i=x/2; i<x/1; i++)
                       {
                        int j;
                           for(j=0; j<liczba_spacji; j++)
                              printf(" ");
                           for(j=0; j<liczba_znakow; j++)
                              printf("%c",znak);
                              printf("
");
                              liczba_znakow = liczba_znakow + 2;
                              liczba_spacji--;
                       }
return 0;
}
Ostatnio zmieniony 31 paź 2009, o 17:59 przez miki999, łącznie zmieniany 1 raz.
Powód: Dodałem klamry [code]. Pozdrawiam.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

nie działająca pętla do...while w C

Post autor: soku11 »

Kodu nie analizuję, bo się go nie da czytać - brak formatowania. Co do samej pętli typu czy jeszcze raz, to można zrobić to tak:

Kod: Zaznacz cały

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

#define BOOL  int
#define TRUE  1
#define FALSE 0


int main(void)
{
  BOOL done=FALSE;
  int something=0;

  while(done==FALSE)
  {
    printf("Jeszcze raz? (0-nie, 1-tak)
");
    scanf("%d",&something);

    if(something==0)
      done=TRUE;
  }

  return EXIT_SUCCESS;
}

Pozdrawiam.
peterp
Użytkownik
Użytkownik
Posty: 30
Rejestracja: 27 sie 2008, o 13:29
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 3 razy
Pomógł: 5 razy

nie działająca pętla do...while w C

Post autor: peterp »

Spróbuj tak:

Kod: Zaznacz cały

int main()
{
    int x, i, liczba_znakow, liczba_spacji, powt;
    char znak;
    do {
        printf("Podaj znak i liczbe nieparzysta: ");
        scanf("%c %d", &znak, &x);
        printf("
");
        liczba_spacji = x/2;
        liczba_znakow = 1;
        for(i=x/2; i<x; i++) {
            int j;
            for(j=0; j<liczba_spacji; j++)
                printf(" ");
            for(j=0; j<liczba_znakow; j++)
                printf("%c", znak);
            printf("
");
            liczba_znakow+=2;
            liczba_spacji--;
        }
        printf("jeszcze raz? (0-nie, 1-tak): ");
        scanf("%d", &powt);
    } while(powt);
    return 0;
}
u mnie działa
Pozdrawiam.
markez444
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 31 paź 2009, o 16:49
Płeć: Mężczyzna
Lokalizacja: Podlaskie
Podziękował: 7 razy

nie działająca pętla do...while w C

Post autor: markez444 »

Oczywiście dziękuje za wszelkiego rodzaju odpowiedzi. Ale mam jeszcze zapytanie do "peterp" czy dałoby się tak zrobić żeby użytkownik zaczynał od samego początku czyli na nowo miał możliwość podania danych do zrobienia piramidki tzn.
.....
...
.... tutaj wykonałby to program pierwszy raz, a następnie zapyta:

.....
Czy chcesz jeszcze raz? 0 - nie 1 -tak
.....
....
.... po wybraniu 1
....
Podaj jeszcze raz znak i liczbę nieparzysta?
....
....
... tutaj wykonałby program ponownie ta piramidke

itd
Bo faktycznie tak jak u ciebie peterp u mnie również działa ta pętla ale pokazuje mi kolejne wartości rozszerzając piramidę u podstawy.
peterp
Użytkownik
Użytkownik
Posty: 30
Rejestracja: 27 sie 2008, o 13:29
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 3 razy
Pomógł: 5 razy

nie działająca pętla do...while w C

Post autor: peterp »

Był błąd w kodzie. Ciężko było go znaleźć, ale się udało. W tej linijce

Kod: Zaznacz cały

scanf(" %c%d", &znak, &x);
wystarczyło wstawić spację przed "%c".
Cały kod masz poniżej:

Kod: Zaznacz cały

int main()
{
    int x, i, j, liczba_znakow, liczba_spacji, powt;
    char znak;
    do {
        printf("Podaj znak i liczbe nieparzysta: ");
        scanf(" %c%d", &znak, &x);
        liczba_spacji = x/2;
        liczba_znakow = 1;
        for(i=x/2; i<x; i++) {
            for(j=0; j<liczba_spacji; j++) printf(" ");
            for(j=0; j<liczba_znakow; j++) printf("%c", znak);
            printf("
");
            liczba_znakow+=2;
            liczba_spacji--;
        }
        printf("jeszcze raz? (0-nie, 1-tak): ");
        scanf("%d", &powt);
    } while(powt);
    return 0;
}
Teraz powinno być ok. W razie czego pisz.
Pozdrawiam.
markez444
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 31 paź 2009, o 16:49
Płeć: Mężczyzna
Lokalizacja: Podlaskie
Podziękował: 7 razy

nie działająca pętla do...while w C

Post autor: markez444 »

Wielkie dzięki za pomoc peterp teraz zauważyłem gdzie miałem dokładnie błąd mój cały kod programu był dobry tylko nie potrzebnie deklarowałem w int liczbę znaków = 1 to dlatego moje usilne próby na działanie pętli nie chciały działać tak sadziłem ze to będzie banalny problem ale po prostu nie umiałem go odnaleźć. Jeszcze raz wielkie dzięki. Pozdrawiam.
ODPOWIEDZ