Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Czyli wersja Bartuca nie zadziała przy programie np. mnożącym dwie podane przez urzytkownika liczby?

-->Bartuc.

>>Wiem moja wina... przepraszam... do getchar(); potrzebna jest biblioteka <stdio.h> zatem:

Potrzebna jest standardowa biblioteka?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Przepraszam wszystkie tęższe umysły :) ale ja dopiero zaczynam przygodę z programowaniem w C i na dzień dzisiejszy jedynym przypadkiem, w którym używałem różnych funkcji do zatrzymania programu, był moment na zakończenie programu, żeby nie znikała konsola...

I tak: dopóki nikt nie czepiał się jakich funkcji do tego mamy używać, ja zawsze wybierałem system("pause"); z biblioteki <stdlib.h> ale teraz jak każą nam pisać w ANSI C to zabronili korzystać z obiektowej funkcji system("pause"); kazali zastępować ją komendą getchar(); Zatem mam pytanie: czy jeśli nie ma ograniczeń co do wersji C z jakiej mamy korzystać, nie lepiej będzie zastosować system("pause"); i jeśli nie to dlaczego nie?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 04.11.2005 o 23:20, Yamamoto napisał:

Czyli wersja Bartuca nie zadziała przy programie np. mnożącym dwie podane przez urzytkownika liczby?

Zadziała, ale w komputerach PC nie tak jak się oczekuje. Ponieważ standardowe wejście jest buforowane wierszami, więc aby zakończyć program trzeba będzie nacisnąć jakiś znak, a potem Enter, aby opróżnić bufor znakowy. Czyli nie wystarczy nacisnąć dowolnego znaku, chyba, że takim znakiem będzie właśnie Enter.

Poza tym w języku C++ funkcje wejścia-wyjścia z języka C zostay pozostawione tylko dla starych programów proceduralnych zgodnych zarówno z C jak i C++. Możliwe, że w którejś nowej edycji tego języka funkcja getchar() nie będzie w ogóle dostępna dla pliku o źródłowego o rozszerzeniu CPP.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 05.11.2005 o 11:35, Bartuc napisał:

Zatem mam pytanie: czy jeśli nie ma ograniczeń co do wersji C z jakiej mamy
korzystać, nie lepiej będzie zastosować system("pause"); i jeśli nie to dlaczego nie?

Jeżeli nie ma ograniczeń co do wersji C/C++, to funkcja system() po prostu nie istnieje. Jest to funkcja niestandardowa, któa istnieje tylko w środowisku Borlanda/Inprise. Na maszynach unixowych, linuxie, superkomputerach tej funkcji zwyczajnie nie ma. Dlatego nie należy jej używać w dowolnym programie, a tylko takim o którym wiemy, że będzie uruchamiany na PC.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czyli mój program powinien wyglądać tak:

//"Jakiś tekst.
#include <iostream.h>
while(!cin.ignore());
int main()
{
cout<<"Jakiś tekst\n";
cin.get();
return 0;
}

Tak to trzeba użyć? Nie wiem bo tak samo jak Bartuc dopiero zaczynam.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To już musi raczej Olamagato pokazać przykładowy programik, w którym zilustrowałby swoją metodę. Ja wiem jedno: ta komenda: while(!cin.ignore()); nie może stać przed int main(void); ja bym ją wrzucił po cin.get(); ale skompilowałem taki programik i raczej nie działa tak jak powinien :P

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A programik z funkcją getchar() i biblioteką <stdio.h>, mnożący dwie liczby podane przez urzytkownika będzie działał jak należy?

PS.biblioteka <stdio.h> jest bibliotką standardową?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 05.11.2005 o 19:33, Bartuc napisał:

while(!cin.ignore()); nie może stać przed int main(void); ja bym ją wrzucił po cin.get(); ale skompilowałem
taki programik i raczej nie działa tak jak powinien :P


Moim zdaniem while(!cin.ignore()); powinno stać przed cin.get(). W przeciwnym wypadku jej używanie nie ma żadnego sensu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 05.11.2005 o 19:38, Yamamoto napisał:

A programik z funkcją getchar() i biblioteką <stdio.h>, mnożący dwie liczby podane przez urzytkownika będzie działał
jak należy?

A czemu nie skorzystasz z mojego rozwiązania? Jest dużo prostsze i nigdy mnie nie zawiodło.

#include <iostream.h>
#include <conio.h>

int main()
{
cout<<"Jakiś tekst\n";
getch();
}

Zdaje mi się, że bibliotekę conio powinieneś mieć, bo jest nawet w darmowym DevC++

Dnia 05.11.2005 o 19:38, Yamamoto napisał:

PS.biblioteka <stdio.h> jest bibliotką standardową?

Zdaje mi się, że nazwa to skrót "standard input-output", ale to biblioteka C - szczerze powiedziawszy pisząc w C++ nigdy z tej biblioteki nie korzystałem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dnia 05.11.2005 o 19:47, Vel Grozny napisał:


#include <iostream.h>
#include <conio.h>

int main()
{
cout<<"Jakiś tekst\n";
getch();
}


Niestety coś nie działa. A program zrobiłem tak jak napisałeś. Wyskakuje mi jakiś błąd :-(

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 05.11.2005 o 20:10, Yamamoto napisał:

Niestety coś nie działa. A program zrobiłem tak jak napisałeś. Wyskakuje mi jakiś błąd :-(

Musi działać. Dałem kopiuj/wklej i skompilował się bez problemu. Tylko "ś" nie wyświetla poprawnie, ale takie to już kodowanie :)
Może masz jakiś szczególnie wrażliwy kompilator?
Spróbuj tak:
#include <iostream>
#include <conio.h>
using namespace std;

int main() - i tutaj bez zmian. Bo to co dałem wywołuje ostrzeżenie (ale powinno się skompilować bez problemu). Może kompilujesz to jako C, a nie C++? I dlatego są problemy z cout?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 05.11.2005 o 20:27, Yamamoto napisał:

Co oznacza ta linijka :
using namespace std;

To standardowa przestrzeń nazw. Pozwala na dołączanie standardowych plików nagłówkowych bez dopisywania rozszerzenia "h" - conio do nich nie należy, dlatego musi być conio.h. Natomiast iostream - a owszem. O ile się nie mylę wprowadzono to po dlatego, że pod różnymi systemami były różne ograniczenia rozszerzeń plików. To zalecany sposób dołączania plików nagłówkowych.

Dnia 05.11.2005 o 20:27, Yamamoto napisał:

Pojawia się taki błąd:
implicit declaration of function ''int getchar(...)''

Niemożliwe, bo... nie użyłem takiej funkcji. Ja użyłem getch(), a Ty wpisałeś getchar(). To duża różnica.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dnia 05.11.2005 o 20:27, Yamamoto napisał:

using namespace std;


Chodzi o to że korzystasz ze standardowych obiektów funkcjii itd. jeśli tego nie zrobisz za każdym razem będziesz musiał pisać np:

std::cout<<"cośtamcostam"

zamiast po prostu cout...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Żaden z podanych wyżej kodów nie chodzi :-( Może to być wina kompilatora?
Mam Dev-C++. Za każdym razem wyskakuje mi jakiś błąd, a programy robie tak jak napisaliście.
Niewiem co mam zrobić, by zaczeło działać.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 06.11.2005 o 09:41, Yamamoto napisał:

Żaden z podanych wyżej kodów nie chodzi :-( Może to być wina kompilatora?
Mam Dev-C++. Za każdym razem wyskakuje mi jakiś
błąd, a programy robie tak jak napisaliście.
Niewiem co mam zrobić, by zaczeło działać.

Nie, kompilowałem dokładnie w tym samym. Próbowałeś to ordynarnie skopiować i wkleić? Jak go wkleisz, wciśnij F9 (zapis+kompilacja) i upewnij się, że w typie pliku jest ustawione C++, a nie C, bo w przypadku mojego programu to może stanowić problem.

Po prostu musi zadziałać.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Skopiuj poniższy kod zaproponowany przez Vel Groznego; działa bez zarzutu i tak jak powinien :P Proponuję Ci również przerzucić się na MS Visual Studio, IMHO najlepszy kompilator :) ja korzystam z MS Visual C++ 6.0 i jeszcze nigdy nie narzekałem :)

#include <iostream>
#include <conio.h>
using namespace std;

int main(void)
{
cout<<"Jakiś tekst\n";
getch();
return(0);
}

Jednakże ta wersja:

#include <iostream.h>
#include <conio.h>

int main(void)
{
cout<<"Jakiś tekst\n";
getch();
return(0);
}

...działa źle, ponieważ program czeka na wciśnięcie jakiegoś klawisza i dopiero po tym wyświetla text :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wszystko zrobiłem to samo. A co mam wybrać przy nowym projekcie?
Mam zaznaczoną pierwszą opcje i projekt c++.
A i jeszcze próbowałem z system("pause");
działało tylko pojawiał się napis:
naciśnij jakiś klawisz aby kontyułować

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować