Zamiana małych liter na duże

0

Napisać funkcję zamieniającą każdą małą literę łańcucha na wielką literę. Znaki, które
nie są literami należy pozostawić nie zmienione
co jest zle ?

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

void change(char* s)
{
    while (*s++ = toupper(s))
        ;
    *s = '\0';
    printf("%s", s);
}

int main(void)
{

    char tekst[20] = "St2t32";
    change(tekst);

    return 0;
}

1

Prezentujesz zagadkę czy szukasz pomocy?

2
while (*s++ = toupper(s))

Wystarczy czytać warningi kompilatora. toupper oczekuje znaku, a nie stringa. Czyli *s, a nie s. Dodatkowo, nie ma sequence pointa między *s i s++ więc jest to UB. Przenieś s++ poza warunek pętli:

while (*s = toupper(*s)) s++;

Finalnie, dlaczego funkcja change wypisuje coś na stdout? Łamiesz SRP, a w tym przypadku drukujesz też pusty string, bo przestawiłeś s na jego koniec.

0

o kurde, nie wiem, to jak to zrobić
'nie ma sequence pointa' ???
tego ostatniego to nie rozumiem

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

void change(char* s)
{
    while (*s = toupper(*s))
       s++ ;
    *s = '\0';

    puts( s);
}

int main(void)
{

    char tekst[20] = "St2t32";
    change(tekst);

    return 0;
}

0

Przecież dostałeś gotowy poprawiony kod...

0

Oszczędź sobie męczarni i przeczytaj jakieś podstawy, np. http://helion.pl/ksiazki/jezyk-ansi-c-programowanie-wydanie-ii-brian-w-kernighan-dennis-m-ritchie,jansic.htm
To jest krótka książka i po niej takie pętle będziesz robił z zamkniętymi oczami.

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