Divné chování vstupů (scanf,gets) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Divné chování vstupů (scanf,gets) – C / C++ – Fórum – Programujte.comDivné chování vstupů (scanf,gets) – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
lDm
~ Anonymní uživatel
1 příspěvek
11. 12. 2011   #1
-
0
-

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

Nahlásit jako SPAM
IP: 89.103.185.–
Reklama
Reklama
vitamin+8
Grafoman
11. 12. 2011   #2
-
+1
-
Zajímavé

#1 lDm
Nacitavanie vsetkych stringov pomocou scanf mas zle. %s vyzaduje ako parameter pointer na prvy prvok retazca.      

scanf("%49s", jmeno);
//alebo
scanf("%49s", &jmeno[0]);
Nahlásit jako SPAM
IP: 95.105.128.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 67 hostů

Podobná vlákna

Divné chování if-else — založil d.mostek

Divné chování for cyklů — založil Blinder

Divné chování polí — založil Seph

Fmod.. divne chovani?? — založil cp.Hook

Moderátoři diskuze

 

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