Results 1 to 11 of 11

Thread: C programming

  1. #1

    Default C programming

    Īsi un konkrēti- tiko sāku mācīties C valodu un vēl līdz galam neizprotu daudzas loģiskās funkcijas, BET esmu apņēmības pilns mācīties.
    Uzdevums: Izveidot programmu, kas lietotājam pieprasa ievadīt string (līdz 10 simboliem). Programma izvada šī string garumu. ("abcd"-->4 utt.) Taču ievadei un garuma noteikšanai jānotiek ar user-defined fuction palīdzību.
    Code:
    #include <stdio.h>
    #include <string.h>
    
    int ievade();
    int garums (char *str);
    
    int main () {
        char str[10];
            ievade();
            garums(str);
        return 0;
    }
    
    int ievade(){
        char str[10];
            printf("Ievadiet kaut ko!\n");
            gets(str);
        return (str);
    }
    int garums (char *str){
        int len;
            len = strlen(str);
            printf("Virknes garums ir |%d|", len);
        return 0;
    }
    Programma vienmēr atgriež 0. Problēma ir "ievades" funkcijā, jo tad, ja string pieprasīšana/nolasīšana notiek main() funkcijā, viss strādā kā nākas. Noteikti kļūda ir ļoti muļķīga, bet nekā nevaru ieraudzīt...

  2. #2
    Pieredzējis lietpratējs BigFish's Avatar
    Join Date
    29-06-15
    Posts
    1,149
    Rep Power
    102

    Default

    Main funkcijā str mainīgais nav tas pats str, kas ir funkcijā ievade. Un strlen nav tevis definēta funkcija - uzdevuma merkis bija tadu izveidot. Realitātē tā programma nevienmēr atgriezīs 0 garumu, bet 0 tiek paradita, jo aplikācija ir kompilēta debug režīmā. Un int tipa funkcija kas atgriež lokālu mainīgo arī ir kaut kas īpašs.
    Last edited by BigFish; 2 Weeks Ago at 20:48.

  3. #3

    Default

    Man jau liekas ka gets() ar nebus ok jo to var implementet ar getc() un catchot Enter vai citus termination simbolus.

    Strlen jau jaaizstaj ar loop un to pasu \0.

    Es vispar izjemtu ara pazinjojumus no func un mestu ara no main(). Attiecigi atliks implementet mygets(maxcount) un mystrlen(..)
    gordo.lv - grāmatvedības pakalpojumi

  4. #4

    Default

    Piekrītu, ka Strlen var aizstāt ar vienkāršu
    Code:
    for(i = 0; str[i] != '\0'; ++i);
    ,kur "i" loop beigās būs šī string garums.

  5. #5

    Default

    Quote Originally Posted by BigFish View Post
    Main funkcijā str mainīgais nav tas pats str, kas ir funkcijā ievade.
    Un šī ir tā vieta, kur es reāli nesaprotu, ko darīt.

  6. #6
    Pieredzējis lietpratējs BigFish's Avatar
    Join Date
    29-06-15
    Posts
    1,149
    Rep Power
    102

    Default

    Ir jāsaprot kāpēc katrā funkcijā definētais mainīgais nenorāda uz to pašu atmiņas apgabalu un jādara tāpat, kā funkcijā garums.

  7. #7

    Default

    Es nebiju sapratis to, ka input() funkcijai vienkārši var padot mainīgo string no main funkcijas. Tādā gadījumā nav jādefinē string no jauna, bet izmanto to vienu.
    Code:
    #include <stdio.h>
    #define E 10
    int ievade(char *str);
    int garums (char *str);
    
    int main () {
        char str[E];
        printf("Ievadiet kaut ko!\n");
            ievade(str);
            garums(str);
        return 0;
    }
    
    int ievade(char *str){
            scanf("%s", str);
    }
    int garums (char *str){
        int i;
            for(i = 0; str[i] != '\0'; ++i);
                if (i>10)
                    printf("Virkne ir garaka par 10 simboliem!");
                else
                    printf("Virknes garums ir |%d|", i);
        return 0;
    }

  8. #8

    Default

    int garums(..) ar ret 0 ir wrong.

    iekš main
    ievade(s);
    int len = garums(s);
    printf(.., len)
    Var protams arī iekļaut -1 atgriešanu pie kļūdas un tās apstrādi. tas kas tev tagad ir nav funkcija, bet "nepareiza procedūra"!


    main()
    {
    ievade(s)
    izvade(s)
    }

    ...
    izvade(*s)
    {
    int len = my_strlen(s);
    if (len >= 0)
    printf
    else
    printf(kluda)
    }

    int my_strlen(*s)
    {
    if (s == null) return -1; // japarbauda, neatceros
    int i;
    while (s[i] != '\0') { i++; } // japarbauda
    return i;
    }
    Last edited by bobiksons; 2 Weeks Ago at 10:48.
    gordo.lv - grāmatvedības pakalpojumi

  9. #9

    Default

    Quote Originally Posted by bobiksons View Post

    Var protams arī iekļaut -1 atgriešanu pie kļūdas un tās apstrādi. tas kas tev tagad ir nav funkcija, bet "nepareiza procedūra"!
    Paldies, papētīšu šo

  10. #10
    Pieredzējis lietpratējs BigFish's Avatar
    Join Date
    29-06-15
    Posts
    1,149
    Rep Power
    102

    Default

    Bobik, lai mainīgos pirms lietošanas nebūtu jāinicializē or jādabū pāvesta svētība.

  11. #11

    Default

    Es tak nedodu pilno kodu. Jeb kā Tu to domā?
    gordo.lv - grāmatvedības pakalpojumi

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •