C++ Dev- ciągłe błędy- Program przestał działać

Odpowiedz Nowy wątek
2013-04-03 20:58
0

Witam!
Dość często zdarza się, że mój Dev wyświetla mi ten komunikat. Szczegóły:

Podpis problemu:
Nazwa zdarzenia problemu: APPCRASH
Nazwa aplikacji: ps.exe
Wersja aplikacji: 0.0.0.0
Sygnatura czasowa aplikacji: 515c7b19
Nazwa modułu z błędem: msvcrt.dll
Wersja modułu z błędem: 7.0.7600.16930
Sygnatura czasowa modułu z błędem: 4eeb01e3
Kod wyjątku: c0000005
Przesunięcie wyjątku: 00000000000622dc
Wersja systemu operacyjnego: 6.1.7600.2.0.0.768.3
Identyfikator ustawień regionalnych: 1045
Dodatkowe informacje 1: a902
Dodatkowe informacje 2: a902b52a4c039f2bef8ff124351ae9a2
Dodatkowe informacje 3: e77e
Dodatkowe informacje 4: e77e053b4c0308e7265f2836c04cee6a

No chyba, że to wina części programu ale podesłał mi ją jeden z zaufanych forumowiczów. Najpewniej mój błąd. Oto program:

#include <iostream>
#include <stdio.h>

int main() 
{
    std::string pesel;
    int a;
    int tab[4];
    std::cout<<"podaj PESEL:  ";
        std::cin>>pesel;

    a=pesel.length();
    {
        for(a=1; a<=6; ++a) 
        {
            scanf("%2d",tab[a]); // 2 cyfry
        }

        for(a=10; a=10; ++a) 
        {
            scanf("%1d",tab[a]); // 1 cyfra
        }
    }

    if( a!=11 );
        getchar();

    printf("%d\n", tab[a]);

    return 0;
} 

Pozostało 580 znaków

2013-04-03 21:08
0

Co to za mix w ogóle? Tablice indeksujemy od 0. Tablica jest indeksowana od zera do 3, a Ty się odwołujesz do 9 elementu. Co Ty chcesz zrobić? Co to za 'zaufany' użytkownik? Maszynaz?

edytowany 1x, ostatnio: kopernik, 2013-04-03 21:11

Pozostało 580 znaków

2013-04-03 21:08
0

Tak: scanf("%2d",tab+a); lub tak: scanf("%2d",&tab[a]);
To ; a=10; też jest błędne.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2013-04-03 21:26
0

przecież ta pętla jest bez sensu. Przypisujesz do a w wyrażeniu inicjalizującym wartość 10 następnie przypisujesz do tej zmiennej a 10 Warunek jest spełniony więc pętla się wykona później zwiększaj a o 1 późnierj znów przypisujesz do "a" 10 i warunek jest spełniony itd

                for(a=10; a=10; ++a) 
                {
                        scanf("%1d",tab[a]); // 1 cyfra
                }

Nie odpowiadam na PW z prośbą o pomoc programistyczną.

Pozostało 580 znaków

2013-04-04 19:38
0

tablica miała mieścić kolejno:
tab[0]=1.2. ( gdzie 1 i 2 to kolejność ich występowania w tekście wpisanym przez urzytkownika czyli pierwszy i drugi)
tab[1]=3.4.
tab[2]=5.6.
tab[3]=10. (tutaj tylko jeden element dziesiąty)
++a miało dodawać kolejne liczby i sprawdzać dzięki pętli każdą liczbę, ale żeczywiście bez sensu jest to +1 gdy jest tylko jedna cyfra. Byłbym wdzięczny za odp. na pytania:
1.Co jest błędem w tablicy?
2.Czy prawidłowo napisałem "a=pesel.length();" i "a" to ilość znaków w peselu?
3.Czemu program każe wpisywać wielokrotnie liczby po wciśnięciu entera zamiast użyć print?
4.Czy dobrze napisałem "if( a!=11 ); getchar();" i po wpisaniu innej ilości liczb niż 11 program się wyłączy?

edytowany 1x, ostatnio: VanKiller, 2013-04-04 19:51

Pozostało 580 znaków

2013-04-04 19:48
0

a=10 - oznacza wpisz w a liczbę 10
a==10 - oznacza sprawdź czy a równe 10


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Wiem o tym i na początku wpisałem if( a!==11 ); bo pewnie o to Ci chodzi, ale był error. Można sprawdzić na pierwszej lepszej stronie co nie co o tym, że powinienem napisać if( a!=11 ); z jednym "=". Np. http://www.elektroda.pl/rtvforum/topic1566429.html - VanKiller 2013-04-04 21:55

Pozostało 580 znaków

2013-04-05 17:07
0

Może ktoś odpowiedzieć na w/w pytania?

1.Nic; 2.Tak; 3.Bo pesel już został wczytany; 4.Napisałeś bez sensu; Taka jest właściwość windows'ów - zamykają zakończoną aplikacje. - _13th_Dragon 2013-04-05 17:26

Pozostało 580 znaków

2013-04-05 19:51
0
VanKiller napisał(a):

tablica miała mieścić kolejno:
tab[0]=1.2. ( gdzie 1 i 2 to kolejność ich występowania w tekście wpisanym przez uŻytkownika czyli pierwszy i drugi)
tab[1]=3.4.
tab[2]=5.6.
tab[3]=10. (tutaj tylko jeden element dziesiąty)
++a miało dodawać kolejne liczby i sprawdzać dzięki pętli każdą liczbę, ale RZeczywiście bez sensu jest to +1 gdy jest tylko jedna cyfra. Byłbym wdzięczny za odp. na pytania:
1.Co jest błędem w tablicy?

Mam rozumieć, że chciałeś umieścić po 2 elementy w jednym polu tablicy? Jeśli chcesz wprowadzić 7 elementów to tablica musi mieć 7 pól to chyba logiczne. Po co tworzysz tablice z 5-oma polami skoro chcesz wykorzystać tylko 4? Kompletnie niezrozumiałe jest dlaczego po stworzeniu tej tablicy próbujesz zapisywać dane poza rozmiarem tablicy.

VanKiller napisał(a):

2.Czy prawidłowo napisałem "a=pesel.length();" i "a" to ilość znaków w peselu?

Tak, a to liczba znaków. Ale to się przydaje do pobierania kolejnych znaków z tego tekstu. To co napisałeś w tej pętli jest totalnie bez sensu

VanKiller napisał(a):

3.Czemu program każe wpisywać wielokrotnie liczby po wciśnięciu entera zamiast użyć print?

scanf służy do pobierania danych ze standardowego wejścia (z twojej klawiatury). Napisałeś pętle która pobierze dane 6 razy więc co w tym dziwnego.

VanKiller napisał(a):

4.Czy dobrze napisałem "if( a!=11 ); getchar();" i po wpisaniu innej ilości liczb niż 11 program się wyłączy?

Warunek jest dobry ale pomyśl czy lepiej go dać na końcu czy na początku. W dodatku przed tym warunkiem zmieniasz wartość a na 10, więc ten if jest do niczego. getchar() nie kończy programu, znajdź w google i przeczytaj co to za funkcja. Jaki sens ma używanie funkcji których działania nie rozumiesz?

Zacznij od czegoś prostszego bo nie znasz podstaw.

Pozostało 580 znaków

2013-04-05 21:32
0

Widać to getchar(); to jakiś noobek podrzucił bo znalazłem na jednej ze stron, że dosłownie "zamyka program". Teraz spr co dokładnie robi i rzeczywiście to głupota była.
Zacznę od początku.


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

int main() 
{
    string pesel;
    int a;
    cout<<"podaj PESEL:  ";
        cin>>pesel;
    a=pesel.length();

    if( a!=11 );
    {
        //zamykanie
    }
    cout<<"Podano 11 znaków."<<endl;

    return 0;
}

Tylko dalej nie mogę dojść jak zamknąć "//zamykanie". Czytałem już kilka stron google i nie mogę dojść. I czego najlepiej byłoby użyć aby potem można było pobierać dane z tablicy a mianowicie pierwszą i drugą cyfrę razem, trzecią i czwartą razem, piątą i szóstą razem, dziesiątą solo.

Ale co Ty chcesz zamykać? Program sam się zamknie, chyba, że się zapętli, wtedy nie. W ogóle bezsensu to piszesz, poczytaj trochę zanim coś zaczniesz pisać (nawet nie wiadomo co Ty chcesz tu osiągnąć) w sieci jest kupę materiałów na temat podstaw C++. - JumpSmerf 2013-04-05 22:12
System("pause"); //przed końcem programu i konsola się nie zamknie. - Weniu 2013-04-06 12:29

Pozostało 580 znaków

2013-04-05 22:22
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char buf[12];
    unsigned in;
    scanf("%11s ", buf);
    in=strlen(buf);
    if(in!=11) return -1;
    printf("Podano 11 znakow.\n");
    return 0;
}

Chcesz zrobic cos takiego? W przypadku wpisania mniejszej ilosci znakow, zamyka program.

No tak, ale z tego nie da się wyprowadzić kolejnych liczb do tablicy bo strlen tylko je liczy. A mi zależy żebym również wprowadził liczby do tablicy :( - VanKiller 2013-04-06 10:51
powiedz co chcesz zrobic, bo tak nigdy nikt Ci nie pomoze... - n0name_l 2013-04-06 11:28

Pozostało 580 znaków

2013-04-06 11:52
0

Program podający datę urodzenia i płeć za pomocą PESELU.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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