C++ Uruchomienie programu na innym komputerze.

0

Witam serdecznie

Mój problem polega na tym, że napisałem program na jednym komputerze i chciałbym go uruchomić na innym poprzez uruchomienie pliku .exe. Ale gdy tak zrobię to program nie działa, nie pojawia się żaden komunikat.

Używam Dev C++ oraz CodeBlocks.

0

Proponuję sprawdzić na jeszcze innym komputerze.

0

Sprawdziłem na trzech różnych.

0

Może uruchom wersję release a nie debug?

0

A jak to zrobić?

0

Nie mam codeblocksa ani deva tym bardziej... poszukaj gdzieś w opcjach kompilacji.

0

Bo zapewne program kończy się wykonywać zanim zauważysz okno konsoli, C::B z tego co pamiętam po zakończeniu wyświetla wynik z czasem wykonywania programu. Dodaj na końcu programu linijkę próbującą pobrać np. jakiś znak i wtedy sprawdź program na drugim komputerze.

0
MVC napisał(a):

Nie mam codeblocksa ani deva tym bardziej... poszukaj gdzieś w opcjach kompilacji.

Nie, to nie w tym problem.

0

Nie chodzi o to, po prostu program nie wykonuje się i ciągle jest widoczne tylko okno konsoli.

0

Proszę o pomoc jak ustawić opcję kompilowania aby otrzymać wersję release. W kodzie nie dzieje się nic nadzwyczajnego, czy problemem może być używanie zmiennej zdeklarowanej jak unsigned long long int?

1

Pokaż kod, bo bez tego nikt Ci nie będzie w stanie pomóc. Z tego co piszesz na 99% jestem pewien, że problem jest w błędnym kodzie. Jakieś przekraczanie zakresu zmiennej, tablicy, whatever.

0

Dziękuje za podpowiedź już sobie z tym poradziłem, znalazłem w CodeBlocks opcję tryby Release, problemem było wychodzenie poza zakres typu double, zmieniłem na long double. Tylko teraz pojawił się problem, ponieważ gdy zapisuje liczbę long double do pliku np. liczba 3 to zostaje zapisana ona jako -2.000000. Jak sobie z tym poradzić? Używam polecenie fprintf.

1

Kolega bardzo usilnie chroni swój kod jakby tam nie wiem co było i wszyscy chcieli ukraść jego cudowne rozwiązania :)
Proponujemy raczej wizytę u jasnowidza, wróżki czy coś w ten deseń. Myślę, ze pomoże bardziej niż to forum w tym wypadku.

1

Bardziej dosadniej:
"Opracowałem swój własny model samochodu 5- kołowego jednak 5 koło się nie kręci. Którą śrubkę muszę poluzować?"
Jesteś w stanie odpowiedzieć na to pytanie będac mechanikiem?

0

pewnie masz formatowanie %f, spróbuj %Lf

0
Komptronic napisał(a):

Dziękuje za podpowiedź już sobie z tym poradziłem, znalazłem w CodeBlocks opcję tryby Release, problemem było wychodzenie poza zakres typu double, zmieniłem na long double. Tylko teraz pojawił się problem, ponieważ gdy zapisuje liczbę long double do pliku np. liczba 3 to zostaje zapisana ona jako -2.000000. Jak sobie z tym poradzić? Używam polecenie fprintf.

Nie, nie chodzi mi o to po prostu chciałem samemu dojść do rozwiązania mojego problemu.

Oto mój kod:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int bez_jedynki;
unsigned long long int zakres;
double suma = 0;
long double liczba = 1;
printf("Prosze podac zakres liczb, maksymalny zakres to 18 446 744 073 709 551 615: \n");
printf("Zakres: ");
scanf("%llu", &zakres);
char napis[21];
printf("\nTrwa liczenie...");

for(unsigned long long int i = 1; i <= zakres; i++)
{
    bez_jedynki = 1;

    itoa( i, napis, 10);
    if(strchr(napis,'1') != NULL)
    bez_jedynki = 0;
    if(bez_jedynki == 1)
    suma = suma + (1/liczba);
    liczba++;
}
printf("\n\nSuma ciagu wynosi: %f \n\n", suma);
return 0;
}

Czy ten program będę mógł uruchomić na systemie 32-bitowym? Skoro używam liczb 64-bitowych?

0

Tak, wystarczy zrobić kompilacje 32 bitową, wtedy long long będzie implementowany jako dwa 32 bitowe rejestry, zamiast jeden 64 bitowy.

0
xxx_xx_x napisał(a):

Tak, wystarczy zrobić kompilacje 32 bitową, wtedy long long będzie implementowany jako dwa 32 bitowe rejestry, zamiast jeden 64 bitowy.

Dziękuje bardzo, a czy jest od tego jakaś opcja w CodeBlocks?

0

Jest całkiem prawdopodobne, że twój program i tak się kompiluje jako 32-bitowy, bo tak jest domyślnie.
Wyświetl ile wynosi sizeof(void*), jeśli 4 to program jest 32-bitowy, jeśli 8 to 64-.

0
Azarien napisał(a):

Jest całkiem prawdopodobne, że twój program i tak się kompiluje jako 32-bitowy, bo tak jest domyślnie.
Wyświetl ile wynosi sizeof(void*), jeśli 4 to program jest 32-bitowy, jeśli 8 to 64-.

Wypisało mi 4, czyli 32-bitowy. Ale i tak program nie odpala się na innych komputerach gdy używam long long int. Jak temu zaradzić?

0
Komptronic napisał(a):
Komptronic napisał(a):

Dziękuje za podpowiedź już sobie z tym poradziłem, znalazłem w CodeBlocks opcję tryby Release, problemem było wychodzenie poza zakres typu double, zmieniłem na long double. Tylko teraz pojawił się problem, ponieważ gdy zapisuje liczbę long double do pliku np. liczba 3 to zostaje zapisana ona jako -2.000000. Jak sobie z tym poradzić? Używam polecenie fprintf.

Nie, nie chodzi mi o to po prostu chciałem samemu dojść do rozwiązania mojego problemu.

Oto mój kod:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int bez_jedynki;
unsigned long long int zakres;
double suma = 0;
long double liczba = 1;
printf("Prosze podac zakres liczb, maksymalny zakres to 18 446 744 073 709 551 615: \n");
printf("Zakres: ");
scanf("%llu", &zakres);
char napis[21];
printf("\nTrwa liczenie...");

for(unsigned long long int i = 1; i <= zakres; i++)
{
    bez_jedynki = 1;

    itoa( i, napis, 10);
    if(strchr(napis,'1') != NULL)
    bez_jedynki = 0;
    if(bez_jedynki == 1)
    suma = suma + (1/liczba);
    liczba++;
}
printf("\n\nSuma ciagu wynosi: %f \n\n", suma);
return 0;
}

Czy ten program będę mógł uruchomić na systemie 32-bitowym? Skoro używam liczb 64-bitowych?

I ten kod kompiluje się i uruchamia poprawnie ? IDE nie sygnalizuje błędów ?

0

Skompilowałem twój kod na MinGW 4.41. Są dwa ostrzeżenia, tak to wszystko działa.

C:\Documents and Settings\Tomek\Pulpit\QT\Test\main.cpp ostrzeżenie:unknown conversion type character 'l' in format line12
C:\Documents and Settings\Tomek\Pulpit\QT\Test\main.cpp ostrzeżenie:too many arguments for format line12

Dokładniej ten : (mam x86 system)

 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int bez_jedynki;
unsigned long long int zakres;
double suma = 0;
long double liczba = 1;
printf("Prosze podac zakres liczb, maksymalny zakres to 18 446 744 073 709 551 615: \n");
printf("Zakres: ");
scanf("%llu", &zakres);
char napis[21];
printf("\nTrwa liczenie...");
 
for(unsigned long long int i = 1; i <= zakres; i++)
{
    bez_jedynki = 1;
 
    itoa( i, napis, 10);
    if(strchr(napis,'1') != NULL)
    bez_jedynki = 0;
    if(bez_jedynki == 1)
    suma = suma + (1/liczba);
    liczba++;
}
printf("\n\nSuma ciagu wynosi: %f \n\n", suma);
return 0;
}
0

Poradziłem sobie z tym problemem, polecenie scanf("%llu", &zakres); zastąpiłem poleceniem scanf("%I64u", &zakres).

1 użytkowników online, w tym zalogowanych: 0, gości: 1