Skocz do zawartości
asia23

Kilka Pytan Do... Z C++

Rekomendowane odpowiedzi

Hej

Mam pare pytan, ponizej podaje program ktory wlasnie pisze i mam pare pytan:

1. co trzeba zrobic zeby program nie przerywal po wykonaniu ktoregos case?

2. w tym programie (choc wiem ze sa bledy dotyczace wczytywania danych) nei dziala porowananie w funkcji testowanie, nie przyrownuje ich do siebie, choc rozpoznaje ktora jest wieksza, co mam zrobic zeby to dzialalo? Tylko nie mowcie ze musze wszystko od nowa:) I jeszcze jedno, chce zeby to byl czysty c++

 

Oto moje wypociny

 

#include <iostream.h>

#include <conio.h>

#include <fstream.h>

#include <stdlib.h>

#include <stdio.h>

 

void wczytywanie(char b);

void testowanie (char );

int il,il2;

main()

{clrscr();

int i;

char b;

cout<<"\n**************************************************************************

******\n"

"Witamy w programie edukacyjnym TESCIK \n"

 

"Wybierz co chcesz zrobic: \n\n"

"1) Wczytywanie pytan testowych (tylko dla nauczycieli!!!)-\t1 \n"

"2) Przeprowadzenie testu-t2 \n"

"3) Wyniki przeprowadzonych testow\n"

"4) Koniec-t4 \n"

"\n Wpisz wybrany numer: \n";

 

cin >>i;

switch(i)

{case 1:

wczytywanie(b); break;

case 2 :

testowanie(b);break;

case 4:

exit(1);

default:continue;

}

}

 

void wczytywanie(char )

 

{int il2,i,j,e;

char a[20],b[20],c[20],B[20];

 

cout<<"Ile pytan chcesz wprowadzic?";

cin>>il;

cout<<"Ile bedzie podpowiedzi?";

cin>>il2;

 

ofstream plik;

plik.open("test2");

plik<<il<<endl;

plik<<il2<<endl;

for(i=0;i<il;i=i+1)

{

 

cout<<"podaj pytanie: " <<i+1<<endl;

cin>>a;

plik<<a<<endl;

cout<<"podaj "<<il2<< "odpowiedzi:" <<endl;

for(j=10;j<il2+10;j=j+1)

{ cout<<itoa(j,B,16)<<" " ;

cin>>b;

plik<<b<<endl;}

cout<< "Podaj ktora odpowiedz jest prawidlowa:"<<endl;

cin>>c;

plik<<c<<endl;

}

plik.close();

}

 

void testowanie (char )

 

{int licz2,licz,il,i,j,e;

char z[20],odp[20],B[20],buf[20],buf2[20],odp2[20];

int p;

 

 

p=0;

cout<<"Witaj !!! Przeczytaj uwaznie pytanie, wybierz odpowiedz\n";

 

ifstream plik;

plik.open("test2");

plik.getline(buf,20);

cout<<buf;

licz=atoi(buf);

 

plik.getline(buf,20);

cout<<buf;

licz2=atoi(buf);

 

for(i=0;i<licz;i=i+1)

{

cout<<"Pytanie: " <<i+1<<endl;

plik.getline(buf,20);

cout<<buf;

for(j=0;j<licz2;j++)

{plik.getline(buf,20);

cout<<buf;

}

cout<<"Podaj odpowiedz: ";

cin>>odp;

plik.get(buf,2);

cout<<endl<<buf<<endl<<odp<<endl;

if(odp==buf) p=p+1;

cout<<"punkty:" <<p<<endl;

}

plik.close();

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ad1.

Funkcja main np. tak

 

main(){ int i=-1; char b; while(i!=4)   //petla bedzie sie powtarzac dopoki nie wybrana zostanie czwórka { clrscr(); cout<< "*************************************" << "Wybierz co chcesz zrobic: \n\n" << "1) Wczytywanie pytan testowych (tylko dla nauczycieli!!!)-\t1 \n" << "2) Przeprowadzenie testu-t2 \n" << "3) Wyniki przeprowadzonych testow\n" << "4) Koniec-t4 \n" << "\n Wpisz wybrany numer: \n" << endl; cin >> i; switch(i) {		case 1:		wczytywanie(b); break;		case 2 :		testowanie(b);break; } } //klamra konczonca while}

ad2. Nie da rady porównać dwóch tablic tak jak ty to zrobiles. Jesli masz np. x[5] oraz y[5]; to nie mozesz napisac if (x==y). Jesli chcesz porowac dwie tablice to musisz porownac po kolei ich wartosci. Do stringow chyba jest jakas funkcja ale nie pamietam nazwy. Odsylam do jakiegos tutoriala, tam napewno to znajdziesz.

 

ad3. Kod programu umieszczaj w tagach code dzieki czemu jest bardziej przejrzysty.

 

 

Tak wogole to na przyszlosc napisz ogolna idee co program ma robic. Zawsze wtedy latwiej powiedziec co jest zle lub cos doradzic

 

Pozdrawiam

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

i dlaczego deklaracja funkcji ma postać

void wczytywanie(char B);

void testowanie (char );

 

a definicja

void wczytywanie(char )

void testowanie (char )

 

deklaracja nie wymaga podawania nazwy parametrów, a definicja wymaga podania że char b, a by w ciele funkcji można było uznać zmienną b za znaną...

 

i w ogóle po co są te parametry b skoro nic w nich nie przekazujesz :)

 

nie powinno sie uzywać zmiennych globalnych jeśli to nei jest oknieczne.. tu : il il2. Potem jeszcze raz definiujesz w funkcji zmienna il2 przesłaniając globalną...

 

zamiast j=j+1 pisze se po prostu j++ co oznacz a postinkrementację zmiennej (analogia: C++ to jest postinkrementacja C, czyli kolejną edycją...)

 

do sprawdzania stringów jest funkcja strcmp(), w taki sposób jak Ty zrobiłaś (asia23) to porównujesz wskaźniki do tablic, któe zawsze bedą różne, bo dwie tablice mają różny adres w pamięci, chybaże jest to ta sama tablica.

 

Poza tym jesli ma to być c++ to ja bym użył elementów biblioteki STL, chociażby vectora zamiast tablicy stringów i stringa zamiast tablic na znaki. No ale początkujący "muszą" swoje męki przezyć :)

Edytowane przez PelzaK

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...