Zaloguj się, aby obserwować  
Bartuc

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

1979 postów w tym temacie

Dla Visuala:

File > New > zakładka Projects > Win32 Console Application (wpisujesz nazwę projektu, zaznaczasz "Create new workspace'' i w ''Platforms'' - Win32) > OK > ''An empty project'' > Finish > OK >>> następnie: File > New > zakładka Files > C++ Source File > wpisujesz ''File name'' dodajesz do projektu i gotowe :)

Przepraszam, że piszę aż tak dokładnie - główne kroki pogrubiłem ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

mógłby mi ktos pomóc,musze napisać program w C generujący alfabet morsea(pisze zdanie i po lkiknięciu enter ma wyskoczyć napisane Morsem).z góry dzięki za pomoc

Udostępnij ten post


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

Wszystko zrobiłem to samo. A co mam wybrać przy nowym projekcie?
Mam zaznaczoną pierwszą opcje i projekt c++.

Źle - pierwsza opcja to Windows Application, a powinno być Console Application.

Najlepiej w przypadku tak prostego programiku wogóle nie tworzyć projektu, tylko sam plik źródłowy (ctrl+N)

Dnia 06.11.2005 o 11:50, Yamamoto napisał:

A i jeszcze
próbowałem z system("pause");
działało tylko pojawiał się napis:
naciśnij jakiś klawisz aby kontyułować

Prawidłowo, ta funkcja symuluje wpisanie przez Ciebie komendy z klawiatury. Jakbyś wpisał system("md smieci"), utworzyłbyś katalog smieci.
O ile dobrze pamiętam, bo chyba nigdy z tego nie korzystałem. :)

Udostępnij ten post


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

A u ciebie w Visualu chodzi ten program??
Z kąd można go pobrać? (Jak jest darmowy).


Tak, w Visualu chodzi ten program (ta pierwsza wersja z using namespace std; - 100% poprawnie :)

A Microsoft Visual Studio Pro, który posiadam, jest niestety (jak prawie każdy program MS) płatny :( Jednak moja wersja pochodzi z MSDNAA - moja uczelnia ma podpisaną umowę z MS na to, że jej studenci mają za darmo dostęp do większości programów MS (i tak np oprócz Visuala mam jeszcze m.in. Windowsa XP Pro z SP2 z kluczem na moje nazwisko :)). Sprawdź czy Twoja uczelnia też należy do MSDNAA (zapytaj się jakiegoś doktorka od informatyki albo kogoś, kto się orientuje w życiu uczelni... i będziesz miał za free (tylko dla własnych naukowych (niekomercyjnych) celów).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam,
Przydalaby sie mala pomoc... troche wsty, bo problem zdaje sie byc banalny, ale chwilowo nie potrafie sobie z nim poradzic...
Programik w ANSI C - majacy na celu otwarcia wskazanego przez uzytkownika pliku

void main() {
char plik[1024],
FILE *moj_plik;

printf("Podaj nazwe pliku, z ktorego maja zostac pobrane dane:\n");
scanf("%c", plik);
moj_plik = fopen("plik", "r");

/*...*/
}
przy %c wyskakuja mi jakies cuda, a przy %s zostaje dodane /0, co uniemozliwia otwarcie pliku... segmentation falaut
co mam z tym fantem zrobic ?!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A może być tak??

FILE *stream;
char msg[MAX2];
stream=fopen("test.txt","r");
if (stream == NULL)
{
fprintf(stdin,"Nie moge otworzyc/utworzyc pliku \"test\".\n");
exit(1);
}
fgets(msg,MAX2,stream);
printf("%s \n",msg);

if (fclose(stream) != 0) /* fclose zwraca 0 jak jest ok inaczej EOF */
fprintf(stderr,"Blad przy zamykaniu pliku.\n");

A i MAX2 to #define MAX2 1024 i trza dodać <stdlib.h> coby exit działało.

Pozdrawiam.

Udostępnij ten post


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

scanf("%c", plik);

W tej funkcji próbujesz wczytać do zmiennej plikowej typu (FILE*) jeden znak.

Dnia 06.11.2005 o 18:41, khepera napisał:

moj_plik = fopen("plik", "r");

A tu próbujesz otworzyć plik o nazwie .\plik. (bez rozszerzenia i w bieżącym katalogu)

Dnia 06.11.2005 o 18:41, khepera napisał:

co mam z tym fantem zrobic ?!

No cóż komunikatay zapewne są sensowne bo nikt nie przewidział, że można tak się pomylić. :)

W C powinno to wyglądać tak:
#include <stdio.h>
const int rozmiarnazwy = 256;

void main()
{
FILE *plik;
char nazwapl[rozmiarnazwy];
int gotowe = 0;
while(gotowe != 1)
{
fputs("Podaj nazwę pliku: ", stdout);
gotowe = scanf("%255s%*[^\n]", &nazwapl[0]);
if( gotowe && (plik = fopen(nazwapl, "r")) == NULL) gotowe = 0;
}
...
fclose(plik);
}

To jest idiotoodporne wczytywanie nazwy pliku, które próbuje wczytać nazwę i otworzyć plik tak długo, aż nie poda się poprawnej nazwy pliku. Instrukcja scanf próbuje wczytać pierwsze 255 znaków nazwy pliku, a następnie zignorować kolejne znaki aż do wciśnięcia znaku Enter (co oznacza \n). Wyrażenie &nazwapl[0] oznacza adres pierwszego znaku łańcucha, ale ponieważ nazwa tablicy oznacza adres pierwszego jej elementu - w tym wypadku znaku, więc wystarczy również napisać po prostu nazwapl i też będzie dobrze (ale trzeba wiedzieć dlaczego). Wynikiem funkcji scanf jest liczba wczytanych elementów, a więc przy poprawnym wszytywaniu nazwy pliku jej wynikiem powinno być 1, co jest zapisywane w zmiennej "gotowe".

Udostępnij ten post


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

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

pętla while powinna być w programie, a nie poza nim bo wtedy kompilator wypisze niestworzone rzeczy (każda instrukcja musi być w bloku funkcji czyli wewnątrz { }).
Powinno byc tak:
#include <iostream>
int main()
{
cout << "Jakiś tekst" << endl;
while(!cin.ignore());
cin.get();
return 0;
}
Zamiast \n czasem trzeba dawać manipulator "endl" (obiekt funkcyjny), który powoduje wysłanie znaku \n, ale oprócz tego wyczyszcza bufor wyjściowy, a dopiero ta operacja powoduje wysłanie znaków na ekran. Trzeba pamiętać, że w C++ cout i cin są plikami buforowanymi wierszowo (na dodatek oba mogą być ze sobą zsynchronizowane, albo nie - zaleznie od ustawień tych plików, opcji kompilatora i systemu), a to oznacza, że wysyłane na ekran i wczytywane z klawiatury są całe wiersze, a nie pojedyncze znaki.
W standardowym ANSI C++ nie ma oparacji #include<iostream.h>, lecz #include<iostream>. Nazwa zawarta w nawiasach kątowych nie jest już nazwą pliku, a rozpoznawanym przez kompilator nagłówkiem standardowym (mimo iż jest to dyrektywa preporocesora). Ma to szczególnie znaczenie w kompilatorach ściśle trzymających się standardu. Generalnie zalecane jest odchodzenie od używania preprocesora w standardowych programach C++ - te same zadania (szczególnie do używania tzw. "stałych", czyli #define i #undef) wykonuje obecnie kompilator przez zadeklarowanie zmiennej globalnej lub statycznej typu const.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Programowanie interesuje mnie tylko w Linuksie, więc nie wiem, jak jest to pod Windowsem, ale c nie jest martwym językiem. Kernel Linuksa jest pisany w c I raczej się to za życia Linusa nie zmieni. Duża część dużego środowiska graficznego jakim jest Gnome jest napisane w c, w c jest napisany MPlayer, kodeki video pod Linuksem. W c pisze się interpretator Pythona I rozszerzenia do niego. Zresztą polecam początkującym programistom Linuksa. Raczej nie zobaczy się kodu Windowsa, nie zobaczy się kodu 99% programów pisanych dla Windowsa. W Linuksie można zobaczyć 99% kodu ( nie zobaczysz kodu Acrobat Readera, javy, Opery itp). Kompilator c/c++ GCC jest chyba dobry, bo Apple stosuje go do kompilacji swojego MacX-a. Jak komuś nie podoba się GCC to jest kompilator Intela, do zastosowań niekomercyjnych jest za friko.

Kod pisany pod Linuksem może być przenośny ( np. lame, ogg, xvid są pisane pod Linucha I pod Windowsa, kod ten sam, tylko proces kompilacji jest robiony pod inne kompilatory.
W Linuchu Pascal jest praktycznie niestosowany. Najpopularniejsze języki to: c, c++, asambler ( łączy się go z c lub c++), perl I Python. PHP też, bo Apache. Jeśli chce się programować w Linuchu, to GCC, NASM ( kompilator asamblera), interpretator Pythona I Perla są niezbędne.
A Python jest bardzo wygodnym I ekonomicznym językiem. W c nie dałoby sie napisać programu P2P w 15 linijkach. W Pythonie tak. A wersja pod Windows Pythona jest do luftu. Pod Linuchem można w Apachu Pythonem zastąpić PHP.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ja jeszcze nie mam takiej prawdziwej uczelni (chodzi mi o uniwersytet albo coś takiego).
A jeśli chodzi o Visuala, to w gimnazjum dla jednego ucznia mi tego nie załatwią :-(

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 09.11.2005 o 15:12, zdroj napisał:

wielkie dzięki że mi ktoś odpisał do C**** pana!!!!!!wyp****** p*****


-2.
chociaż podejrzewam że i tak tę szansę zmarnujesz...
________________

----> Yamamoto
nie siej paniki ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wiatm

mam do rozpatrzenia następujący program:

Napisz program porównujący dwa pliki, których nazwy podane sa jako parametry. Jeśli pliki są różne podaje pozycję pierwszej różnicy między nimi.

./program plik1.txt plik2.txt

Program ma być napisany w ANSI C

Proszę o wszelkie propozycje.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 09.11.2005 o 20:08, bart119 napisał:

Wiatm

mam do rozpatrzenia następujący program:

Napisz program porównujący dwa pliki, których nazwy podane sa jako parametry.
Jeśli pliki są różne podaje pozycję pierwszej różnicy między nimi.

./program plik1.txt plik2.txt

Program ma być napisany
w ANSI C

Proszę o wszelkie propozycje.


W Linuksie jest taki gotowy program, zwie się diff. Znaleźć trzeba w necie plik źródłowy wspakowany jako .tar.gz lub .tar.bz2 . Najłatwiej to w Google wklep Debian pakiety, tam wybierz wersję stabilną, base system. Tam odszukaj diff, a tam source. I masz źródła gotowego programu. Jest jeszcze cmp ( do porównywania plików binarnych). Trzeba pewnie przerobić źródła, aby działały pod Windowsem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 09.11.2005 o 20:08, bart119 napisał:

Wiatm

mam do rozpatrzenia następujący program:

Napisz program porównujący dwa pliki, których nazwy podane sa jako parametry.
Jeśli pliki są różne podaje pozycję pierwszej różnicy między nimi.

Niestety nie znam funkcji C - zawsze korzystałem z C++, ale może trochę Ci to rozjaśni.

Podstawa to początek - argc określa ile podano argumentów, a drugi argument to wskaźnik do tablic znakowych, zawierających parametry. Nazwy tych argumentów mogą być dowolne.
int main(int argc, char* argv[])

Teraz trzeba wczytać pliki argv[1] i argv[2] - argv[0] to ścieżka do programu.
Jak masz je już w jakichś tablicach znakowych, to wystarczy użyć instrukcji for, sprawdzając każdy kolejny znak. Jeśli się nie zgadzają, to wykonać takie instrukcje: wypisać numer znaku (to będzie i+1, gdzie i to numer znaku do sprawdzenia, ale my chcemy zaczynać od pierwszego, a nie zerowego) i dać break. Program przestanie się wykonywać i będzie gites :) Jeśli chcemy, aby napisał, że różnic nie ma, trzeba dopisać ifa, który sprawdzi, czy to był ostatni znak i wtedy wyświetli info, że pliki są takie same.

Mam nadzieję, że choć trochę pomogłem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

witam

od niedawna zacząłem a przynajmniej próbuje coś robić w języku c.
No i zawiesiłem się na programie który powinien sprawdzić czy podana z liczba jest dodatnia ujemna bądź czy jest zerem. Niby banał jednak ja poległem jeśli ktoś mógłby pokazać mi kod takiego programu albo wskazać stronkę na której byłby jakiś sensowny kurs c dla bardzo początkujących to byłbym bardzo wdzięczny.

p.s. używam kompilatora (Bloodshed Dev-C++)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie wiem, czy Ci to pomoże, ale w Dev C++ masz w dziale Pomoc/Help, wprowadzenie do C. Wszystko, co Ci będzie potrzebne tam jest.

Choć wydaje mi się, że C++ jest prostszy (cout i cin są prostsze w użyciu od printf i scanf, bo nie wymagają dodatkowych parametrów).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A tu działający program. Tylko musisz wywoływać go z wiersza poleceń (w Win XP - Akcesoria/wiersz poleceń), bo inaczej zamknie się, zanim zobaczysz wynik :) Aha... działa tylko na liczbach całkowitych i nie sprawdza, czy dane są wprowadzone poprawnie.

#include <stdio.h>
int main()
{
int liczba;
printf("Podaj liczbe do sprawdzenia\n");
scanf("%d",&liczba);
if (liczba>0) printf("\nLiczba jest dodatnia.\n");
if (liczba==0) printf("\nTo zero.\n");
if (liczba<0) printf("\nLiczba jest ujemna.\n");
return 0;
}

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ć