Jump to content

Archived

This topic is now archived and is closed to further replies.

Sabi

Rozwiązany: Uruchamianie programów z C na MS Visual Studio

Recommended Posts

Witajcie, jeżeli to nie sprawia problemu, prosiłbym o pomoc z pewnym, nie ma co ukrywać, głupim problemem. Jako, że w ramach MSDN Academic Alliance otrzymałem dostęp min. do VS 2008, zdecydowałem się wykorzystać go do ćwiczenia w domu z programowania na studiach. Dotychczas ćwiczyłem to jedynie na uczelni, gdzie wykorzystywany był wbudowany program z dystrybucji Linuxa o nazwie Debian - po prostu pisaliśmy program w pliku tekstowym o rozszerzeniu .c, kazaliśmy programowi go "zbudować" (build) i uruchomić. Pytanie brzmi - jak mam zrobić to samo w VS? Na pasku opcji nie widzę żadnych poleceń od kompilacji ani chociaż testowania, a z samego .c przecież program się nie uruchomi. Plik pomocy o tym nie wspomina, Google pokazują jedynie pieśni pochwalne na temat VS.

Od razu dziękuję za wszelką pomoc.

Link to comment
Share on other sites

Jeśli chcesz skompilować z poziomu wiersza poleceń pojedynczy plik, to robisz co następuje.

1. Ustaw zmienne środowiskowe, w tym celu można uruchomić plik vcvars.bat znajdujący się w katalogu (ścieżka do instalacji Visual Studio)\VC\bin\, lub po prostu uruchomić wiersz poleceń Visual Studio, który znajdziesz w menu Start.

2. Od tego momentu, w wierszu poleceń, w którym wywołałeś plik możesz używać narzędzi do kompilacji. Dla pojedynczego pliku o rozszerzeniu .c należy użyć programu cl.exe. A do kompilacji z pomocą plików makefile programu nmake.

Link to comment
Share on other sites

A nie możesz wykorzystać IDE?

Tu masz linki: http://msdn.microsoft.com/en-us/library/ms235639(VS.80).aspx

http://msdn.microsoft.com/en-us/library/610ecb4h(VS.80).aspx

Zapytanie: http://www.google.pl/search?hl=pl&clie...mp;aql=&oq=

A tu link dla nmake: http://msdn.microsoft.com/en-us/library/dd9y37ha(VS.71).aspx

Przy VS bardzo istotne jest rozszerzenie plików, .cpp to C++, a .c to język C.

Wraz z 2010 ma zostać zmieniony system budowania dla C/C++.

Link to comment
Share on other sites

Z drugiego linka zlazałem odesłanie do materiałów o wersji 2008, teraz powinienem sobie już jakoś poradzić.

Dzięki za pomoc.

////////

Edit: A jednak coś poszło nie tak, nie rozumiem komunikau o błędzie:

errorvh.png

Link to comment
Share on other sites

Nie rozumiem, jak mam "wywołać komendę w innym katalogu". Command Prompt uruchamiam z paska zadań:

http://img214.imageshack.us/img214/8789/commandc.png

A samo polecenie (zgodnie z tym, co napisano tutaj: http://msdn.microsoft.com/en-us/library/ms235639.aspx ), podaję mu tak:

http://img716.imageshack.us/img716/9088/command1.png

http://img690.imageshack.us/img690/5571/command2.png

Link to comment
Share on other sites

Istotna jest ścieżka z jakiej rozpoczynasz wywoływanie komendy. Tzn. najpierw za pomocą cd zmień katalog na ten, w którym znajdują się pliku projektu, a następnie spróbuj wpisać komendę.

[edit]

Skoro masz pliki bezpośrednio na dysku, to wystarczy zmienić dysk wpisując F:

Link to comment
Share on other sites

Tablice dynamiczne w C tworzy się inaczej i stąd błędy. Wpisz w google coś w stylu tablice dynamiczne c, to pewnie znajdziesz jak należy definiować tablice dynamiczne. Jeśli będziesz miał problemy, to pisz.

Link to comment
Share on other sites

Żeby nie zaśmiecać forum i nie zakładać nowego tematu, swój kolejny problem zgłaszam już tutaj.

Chociaż wykładowca wysłał mi poprawioną wersję mojego programu z komentarzami, to jednak, aby zrozumieć w pełni problem, musiałem sam napisać w końcu wersję poprawną. Jednakże, program napisany przezemnie zawiesza się nagle i nie jestem w stanie stwierdzić dlaczego. Plik .c jak poprzednio dołączam do posta. Ten z dodanym _mod to wersja wykładowcy, ten z _popr2 to moja.

Bardzo prosiłbym o wyjaśnienie, dlaczego program się zawiesza. Od razu dziękuję za wszelką pomoc.

15_03_10mod.zip

15_03_10_popr2.zip

Link to comment
Share on other sites

Daleko nie zaszedłem - już w linii 71 masz błąd w scanf.

Używanie goto należy raczej do złych praktyk - większość można zastąpić pętlami bez problemów.

Dlaczego nie użyjesz debuggera? Sprawdziłbyś kod krok po kroku.

Link to comment
Share on other sites

Błędów jest sporo. Poza błędnym użyciem scanf warto też odnotować błędy w if w funkcji wyp (= zamiast ==). Tak jak napisał wies.niak nie należy używać goto, lepiej jest np. użyć pętli while.

Link to comment
Share on other sites

Zamieniłem wszystkie goto na do while (wybaczcie, ale pierwszy kontakt z programowaniem miałem na Atari dziadka, czyli Basicu), ale z błędów (raczej warning'ów) pozostaje tylko jeden wyrzucany przez kompilator: " 'wyp' must return a value". Nie rozumiem, przecież funkcja wyp służy właśnie do wypełniania samej tabeli (losowo lub ręcznie) i nadpisuje jej elementy. Dlaczego wg kompilatora nie zwraca żadnych wartości?

Ponownie dodaję do posta plik .c i dziękuję za wszelką pomoc i sugestie.

15_03_10_popr2.zip

Link to comment
Share on other sites

W linii 82 nadal masz błąd.

Powinno być

scanf ("%d",&N);

Funkcja int powinna zwracać wartość typu int. Chodzi o to, że zwracane wartości mogą być wykorzystywane w celach diagnostycznych.

Pętlę też bym zrobił nieco inaczej, bo obecnie po wyborze zera i tak jeszcze jeden raz prosi o wpisanie wszystkich danych.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...