asia23 Opublikowano 3 Stycznia 2006 Zgłoś Opublikowano 3 Stycznia 2006 (edytowane) Hej Napisalam program ktory ma wczytywac pytania (po wyborze 1 na haslo) i testowac np. uczniow naliczajac punkty za prawidlowa odpowiedz Liczniki (ile pytan i ile odpowiedzi ) zapisywane sa w jednym pliku wraz z odpowiedziami a pytania w drugim Program dziala ale: 1) Nalicza punkty co drugie pytanie 2) Zapetla sie (tak jakby w tle cos ten program jeszcze robil i zapychal pamiec) #include <iostream.h>#include <conio.h>#include <fstream.h>#include <stdlib.h>#include <stdio.h>#include <string.h>void wczytywanie(char B);void testowanie (char );void pp();int il,il2; //deklaracja zmiennych globalnych potrzebnych w calym programiemain(){clrscr(); //czyszczenie ekranuint i;char b;while(i!=3) //petla powodujaca wyswietlanie menu az do nacisniecia 3{clrscr ();cout<<"********************************************************************************\n""Witamy w programie edukacyjnym TESCIK \n""Wybierz co chcesz zrobic: \n\n" //menu"1) Wczytywanie pytan testowych (tylko dla nauczycieli!!!) \n""2) Przeprowadzenie testu \n""3) Koniec \n""\n Wpisz wybrany numer: \n";cin >>i; //wprowadzenie wybranej opcjiswitch(i) //podpiecie funkcji pod menu{case 1:pp(); break;case 2 :testowanie(B);break;case 3:exit(1);}}}void wczytywanie(char ){int i,j;char a[100],b[100],B[100];char c;cout<<"Ile pytan chcesz wprowadzic?";cin>>il;cout<<"Ile bedzie podpowiedzi?";cin>>il2;ofstream plik,plik2; // otwarcie pliku do zapisuplik.open("liczniki.txt");plik2.open("pytania.txt");plik<<il<<endl; //wczytanie do pliku zmiennych potrzebnych potem do petliplik<<il2<<endl;for(i=0;i<il;i++) // petla do wprowadzania pytan{cout<<"podaj pytanie: " <<i+1<<endl;gets(a);plik2<<a<<endl; //zapisanie odpowiedzi w oddzielnym plikucout<<"podaj "<<il2<< "odpowiedzi:" <<endl; for(j=0;j<il2;j=j+1) //petla do wprowadzania podpowiedzi { cout<<itoa(j+10,B,16)<<" " ; //zamiana na kod asci zeby wypunktowanie bylo literowe gets(B); plik2<<b<<endl;} cout<< "Podaj ktora odpowiedz jest prawidlowa:"<<endl; cin>>c; plik<<c<<endl; }plik.close();plik2.close() ; // zamkniecie plikow}void pp (){ int ptr,b;char *haslo="Jakub", *haslo2; //ustalenie haslacout<<"Podaj haslo: ";gets(haslo2);ptr=strcmp(haslo2,haslo); //porowannie wpisanego hasla i hasla ustalonegoif(ptr==0) wczytywanie(B) ;}void testowanie (char ){int licz2,licz,i,j,p;char nm[100],B[20],buf[20];char odp,odp2;p=0; //wyzerowanie punktowcout<<"Witaj !!! Przeczytaj uwaznie pytanie, wybierz odpowiedz\n";ifstream plik,plik2;plik.open("liczniki.txt");plik2.open("pytania.txt");plik.getline(buf,20);cout<<buf;licz=atoi(buf); //konwersja pobranej zmiennej na integer i przypisanie do zmiennej liczplik.getline(buf,20);cout<<buf;licz2=atoi(buf);for(i=0;i<licz;i++){ cout<<"Pytanie: " <<i+1<<endl; plik2.getline(buf,20,'\n'); puts(buf); for(j=0;j<licz2;j++) { cout<<itoa(j+10,B,16)<<" " ; plik2.getline(buf,20,'\n'); puts(buf); } cout<<"Podaj odpowiedz: "; cin>>odp; plik.get(odp2); if(odp==odp2) p=p+1; //zwiekszenie punktow jesli odpowiedz jest prawidlowa cout<<"punkty:" <<p<<endl; //wyswietlenie punktow } plik.close(); plik2.close(); ofstream plik3; plik3.open("wyniki.txt",ios::app); //otwarcie do zapisu z zapisywaniem na koncu cout<<"Podaj swoje nazwisko i imie"<<endl; gets(nm); plik3<<nm<<endl; //zapisanie imienia i nazwiska w pliku plik3<<p<<endl; //zapisanie punktow w pliku } [\code] Edytowane 3 Stycznia 2006 przez asia23 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Artur.M Opublikowano 8 Stycznia 2006 Zgłoś Opublikowano 8 Stycznia 2006 sorry ale nie chciało mi się już wnikać w przyczynę błędu(strasznie zamotany ten kod) ale napisałem Ci moją wersję. Jak dobrze wszystko zrozumiałem to powinna działć tak jak ta twoja. #include<stdlib.h>#include<cstring>#include<cstdio>void autoryzacjia(void);void NowyTest(void);void Testuj(void);void Menu(void);using namespace std;char haslo[] = "password";void Menu(void){ printf("Wybierz interesujaca Cie opcjie:\n"); printf("1 - Stwórz nowy test (tylko dla nauczycieli)\n"); printf("2 - Przeprowadź test\n"); printf("3 - Zakończ\n"); int choose = 0; scanf("%d",&choose); switch(choose) { case 1: { autoryzacjia(); } break; case 2: { Testuj(); } break; default: { return; } }}void autoryzacjia(void){ printf("Podaj haslo aby dokonac zmian\n"); char pass[40]; scanf("%s",pass); if(!strcmp(haslo,pass)){ NowyTest(); } else{ printf("Zle haslo"); system("cls"); Menu(); }}void NowyTest(void){ unsigned int uiIloscPytan; unsigned int uiIloscOdp; printf("Ile pytan chcesz umiescic w tescie?\n"); scanf("%d",&uiIloscPytan); printf("Podaj ile mozliwosci odpowiedzi chcesz dac\n"); scanf("%d",&uiIloscOdp); FILE* file = fopen("c://Pytania.dat","wb"); fwrite(&uiIloscPytan,sizeof(int),1,file); fwrite(&uiIloscOdp,sizeof(int),1,file); char Pytanie[100]; memset(Pytanie,0,100); char Odp[30]; unsigned int Poprawne; for(int i = 0; i<uiIloscPytan;++i) { printf("Podaj pytanie:"); fflush ( stdin ); gets(Pytanie); fwrite(&Pytanie,sizeof(Pytanie),1,file); memset(Pytanie,0,100); for(int j = 0; j< uiIloscOdp; ++j) { printf("Podaj %d odpowiedź:",j+1); gets(Odp); fwrite(&Odp,sizeof(Odp),1,file); memset(Odp,0,30); } printf("\nKtóra odpowiedź jest pooprawna(wpisz numer odpowiedzi zaczynajac od 1)"); scanf("%d",&Poprawne); fwrite(&Poprawne,sizeof(int),1,file); } fclose(file); system("cls"); Menu();}void Testuj(void){ char w; unsigned int wybor; unsigned int uiPunkty = 0; FILE* file = fopen("c://Pytania.dat","rb"); if(file == NULL){ printf("Brak testu\n"); printf("\n Jezeli chcesz wrocic do menu nacisnij M, w przeciwnym razie dowolny inny klawisz\n"); scanf("%c",&w); if(w == 109){ system("cls"); Menu(); } return; } unsigned int uiIloscPytan; unsigned int uiIloscOdp; char Pytanie[100]; char Odp[30]; unsigned int Poprawne; fread(&uiIloscPytan,sizeof(unsigned int),1,file); fread(&uiIloscOdp,sizeof(unsigned int),1,file); for(int i = 0; i < uiIloscPytan; ++i) { printf("Pytanie numer %d ",i+1); fread(&Pytanie, sizeof(Pytanie),1,file); printf("%s\n",Pytanie); memset(Pytanie,0,100); for(int j = 0; j< uiIloscOdp; ++j) { printf("%d)",j+1); fread(&Odp,sizeof(Odp),1,file); printf("%s\n",Odp); memset(Odp,0,100); } fread(&Poprawne,sizeof( int ), 1,file); printf("Podaj numer prawidlowej odpowiedzi:"); scanf("%d",&wybor); if(wybor == Poprawne){ printf("Poprawna odpowiedź\n"); uiPunkty++; } else { printf("Zla odpowiedz\n"); } } fclose(file); printf("Uzyskales %d punktow na %d mozliwych\n",uiPunkty, uiIloscPytan); printf("\nJezeli chcesz wrocic do menu nacisnij M, w przeciwnym razie dowolny inny klawisz\n"); scanf("%c",&w); if(w == 109){ system("cls"); Menu(); }} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
asia23 Opublikowano 8 Stycznia 2006 Zgłoś Opublikowano 8 Stycznia 2006 Dzieki wielkie Do czego jest ta linijka using namespace std? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Ragnor Opublikowano 8 Stycznia 2006 Zgłoś Opublikowano 8 Stycznia 2006 Dzieki wielkie Do czego jest ta linijka using namespace std? Okręśla przestrzeń nazw min dla zmiennych, tutaj małe info po ang: using namespace std; All the elements of the standard C++ library are declared within what is called a namespace, the namespace with the name std. So in order to access its functionality we declare with this expression that we will be using these entities. This line is very frequent in C++ programs that use the standard library. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Artur.M Opublikowano 9 Stycznia 2006 Zgłoś Opublikowano 9 Stycznia 2006 Prawdopodomnie używasz kompilatora z c++ buildera bo on dopuszcza jeszcze takie starsze wersje. Powinno się używam nie iostream.h tylko iostream musismy też wtedy korzystać z przestrzeni nazw. Dla biblioteki standardowej jest to std czyli albo dodajemy na początku using namespace std; albo wszędzie piszemy std::cout std::cin itd. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...