Anonymní profil lDm – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil lDm – Programujte.comAnonymní profil lDm – Programujte.com

 

Příspěvky odeslané z IP adresy 89.103.185.–

lDm
C / C++ › divné chování vstupů (scanf,…
11. 12. 2011   #151114

zdravím,

dneska jsem se setkal s velice zajímávým problémem, a to tím, že se mi ignorují v programu některé načítání pomocí funkce scanf (podobně se mi chová i gets).

Máme zdroják:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
    int volba = 0;
    //osoba seznam[100];
    char jmeno1[50];
    char prijmeni[50];
    char adresa[100];
    char den[2];
    char mesic[20];
    char telefon[9];
    char email[50];
    int rok;
    printf("Zadejte: \n1 pro vytvoreni osoby \n2 pro zruseni osoby\n3 pro najiti osoby \n4 pro tisk osoby\n9 pro ukonceni programu\n\nVase volba: ");

    scanf("%d",&volba);
    if(volba == 1){
        printf("\n Zadejte jmeno osoby: ");
        scanf("%s",&jmeno1[50]);
            printf("\n jmeno %s", jmeno1);
        printf("\n Zadejte prijmeni osoby: ");
        scanf("%s",&prijmeni[50]);
            printf("\n jmeno %s", jmeno1);
        printf("\n Zadejte adresu osoby: ");
        scanf("%s",&adresa[100]);
        printf("\n Zadejte datum narozeni osoby (ve tvaru DEN MESIC ROK): ");
        scanf("%s %s %i",&den[2],&mesic[20],&rok);
        printf("\n Zadejte telefon osoby: ");
        scanf("%9s",&telefon[9]);
        printf("\n Zadejte email osoby: ");
        scanf("%s",&email[50]);
        printf("\n\njmeno: %s \n prijm %s \n adres %s \n nar %s %s %d \n tel %s \nmail%s \n",jmeno1,prijmeni,adresa,den,mesic,rok,telefon,email);
        //vytvor_osobu(jmeno1,prijmeni,adresa,*den,*mesic,rok,telefon,email,seznam);
        return 0;
    }

    else if(volba == 9){
        return 0;
    }

    else {
    printf("\nerror: neznamy prikaz\n");
    return main();
    }
}

při kompilaci mi to nehází žádné chyby ani nehlásí žádné varování, přesto, když mi najede program a zvolím si volbu tak, aby mi proběhla tahle podmínka (samo na tohle navazuje další spousta věcí, tak se mi ignoruje proměnná jméno1, viz tenhle screen:

http://img862.imageshack.us/img862/6523/tesths.png

no prostě vidíte sami, že mi do proměnné jméno načte to, co se mělo načíst do proměnné příjmení, atd atd.

A tak tedy nastává otázka, jak tohle mám vyřešit, zkoušel jsem nějaké prasečiny, ale ani ty nezabrali, přepsání scanfů na gets taky nepomůže (jmeno1 se úplně ignoruje), prohození pořadí taky nic (jen se ignoruje jiná proměnná) a já v tom zaboha prostě nevidím to, co mi způsobuje chybu (a nebo jsem tak blbý :D )...

děkuji za rady

ps: prostředí Codeblocks, kompilátor GCC

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý