Zamiana małych liter na duże

Zamiana małych liter na duże
bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
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 ?

Kopiuj
#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;
}

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
1

Prezentujesz zagadkę czy szukasz pomocy?

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2
Kopiuj
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:

Kopiuj
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.

bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
0

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

Kopiuj
#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;
}

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

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

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.