if... else - problem poczatkujacego

0

Witam,
jesli chodzi o c i c++ to jestem baardzo poczatkujacy.

Mam problem z instrukcjami warunkowymi if... else.
Mianowicie chce w jednej aplikacji zastosowac kilka instrukcji warunkowych niezaleznych od siebie.
Nie udaje mi sie to, bo jak zrobie jedno instrukcje w ktorej program zapisuje cos do zmiennych, a w drugiej instrukcji chce dzialac na calkiem innych zmiennych program sie sypie...

Jak oddzielic jedna instrukcje warunkowa od drugiej, tak aby program widzial, ze zaczyna sie druga, calkiem inna i niezalezna od pierwszej intrukcja?

Prosze o konkretny przyklad na kodzie C...

Z gory dzieki za pomoc!

0
int a = 1, b = 5, c = 10;

if( c == 10 )
{
  c = 8;
  a = 3;
}
else
{
  c = 5;
  a = 4;
}

if( c == 9 )
  c = 6;
else if( c == 8 )
  c = 5;
else 
  c = 4;

jezeli nie ma klamer, if tylko jedna instrukcje wykonuje, wiec kod

if( c == 1 )
  c = 2;
  a = 3;
else
  c = 4;
  a = 5;

jest bledny i wywali sie przy kompilacji

ew kod

if( c == 1 )
  c = 2;
  a = 3;

rowniez jest logicznie bledny, mianowicie instrukcja a = 3 bedzie wykonana ZAWSZE, nie zaleznie od instrukcji warunkowej

dobrym pomyslem na poczatek jest dawac zawsze klamry w blokach kodu przy instrukcjach warunkowych / petlach etc

0

Kurcze, nie moge zlokalizowac bledu, oto kod, napisalem go po kilkunastu minutach czytania jakiegos faq nie majac wczescniej do czynienia z C wiec wielce prawdopodobne, ze jest tu kilka kardynalnych bledow. :)

#include <stdio.h>
main()
{
char a,b,e;
int wynik;
wynik=0;
e='a';

printf("Stolica Polski?\n a)Warszawa\n b)Wietnam\n c)Chicago");
scanf("%c",&a);
if(a==e) 
{
printf("Dobrze");
wynik=wynik++;
}
else 
{
printf("Zle");
}

//2
printf("\nMiasto to?\n a)Berlin\n b)Polska\n c)Niemcy");
scanf("%c",&b);
if(b==e)
{
printf("Dobrze");
wynik=wynik++;
}
else 
{
printf("Zle");
}
printf("%d",&wynik);
}
0

main( ) zmien na int main( void )
to raz, dwa to
wynik = wynik++; zmien na samo wynik++;
tj niby to samo bedzie robic (dokladnie to samo), ale
wynik = wynik++; zrobi:
wynik = wynik; // strata czasu procka
wynik = wynik + 1; //wlasciwa operacja
natomiast ciebie to drugie interesuje tylko
mozesz to zapisac jako wynik++; wynik+=1; lub wynik = wynik +1; sposob pierwszy najlepszy
na koncu:
printf( "%d", &wynik );... wywal & sprzed wynik
& to "adres zmiennej", a ciebie jej wartosc interesuje... & raczej w scanf na razie bedziesz uzywal
po tym printf na koncu daj return 0;
i tyle

0

Tutaj występuje jeszcze inny problem :
zauważ,że czytając znaki z klawiatury zapisujemy je do bufora(do pamięci).
Jeżeli wpiszesz z klawiatury 'a' i naciśniesz enter to pierwszy znak przeczyta 'a',ale w buforze pozostaną dwa znaki z entera dlatego później zostanie odczytane z bufora '\n'.
Możesz sobie sprawdzić używając debagera. gdybyś wpisał aa enter za pierwszym razem to wypisze ,że oba są dobrze. rozwiązaniem jest czyszczenie bufora po operacji odczytu fflush(stdin);

#include <stdio.h>
#include <conio.h>
main()
{
char a,b,e;
int wynik;
wynik=0;
e='a';

printf("Stolica Polski?\n a)Warszawa\n b)Wietnam\n c)Chicago");
scanf("%c",&a);
if(a==e)
{
printf("Dobrze");
wynik=wynik++;
}
else
{
printf("Zle");
}

//2
fflush(stdin);
printf("\nMiasto to?\n a)Berlin\n b)Polska\n c)Niemcy");
scanf("%c",&b);
if(b==e)
{
printf("Dobrze");
wynik=wynik++;
}
else
{
printf("Zle");
}
printf("%d",wynik);
getch();
}

0

Teraz dziala. [hurra]
Dzieki. :)

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