• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

błędy przy kompilacji

Object Storage Arubacloud
0 głosów
172 wizyt
pytanie zadane 21 września 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)

W następujący funkcjach pojawiają mi się takie błędy:

In file included from .\2.11.c:2:
.\letter_changer.c: In function 'char* change_letter_size(char*, letter_changer_t)':
.\letter_changer.c:16:24: error: cast from 'char*' to 'char' loses precision [-fpermissive]
         to_lower((char)txt);
                        ^~~
.\letter_changer.c:20:24: error: cast from 'char*' to 'char' loses precision [-fpermissive]
         to_upper((char)txt);
                        ^~~
.\letter_changer.c: At global scope:
.\letter_changer.c:24:18: error: 'char to_lower' redeclared as different kind of symbol
 char to_lower(txt)
                  ^
In file included from .\letter_changer.c:2,
                 from .\2.11.c:2:
.\letter_changer.h:8:6: note: previous declaration 'char to_lower(char)'
 char to_lower(char txt);
      ^~~~~~~~
In file included from .\2.11.c:2:
.\letter_changer.c:24:15: error: 'txt' was not declared in this scope
 char to_lower(txt)
               ^~~
.\letter_changer.c:38:18: error: 'char to_upper' redeclared as different kind of symbol
 char to_upper(txt)
                  ^
In file included from .\letter_changer.c:2,
                 from .\2.11.c:2:
.\letter_changer.h:9:6: note: previous declaration 'char to_upper(char)'
 char to_upper(char txt);
      ^~~~~~~~
In file included from .\2.11.c:2:
.\letter_changer.c:38:15: error: 'txt' was not declared in this scope
 char to_upper(txt)

Oto mój program:

Main:

#include <stdio.h>
#include "letter_changer.c"

void clear()
{
    if(getchar()!='\n'){clear();}
}

int main()
{
    char tab[1000] = {0};
    enum letter_changer_t c;
    char zmienna = 0;
    printf("Podaj tekst: ");
    scanf("%1000[^\n]", tab);
    clear();
    printf("Podaj S albo B: ");
    scanf("%c", &zmienna);
    if(zmienna == 'S' || zmienna == 's')
    {
        c = TO_LOWER;
    }
    else if(zmienna == 'B' || zmienna == 'b')
    {
        c = TO_UPPER;
    }
    printf("%s", change_letter_size(tab, c));
    return 0;
}

letter_changer.c :

#include <stdio.h>
#include "letter_changer.h"

char* change_letter_size(char *txt, enum letter_changer_t c)
{
    if(txt == NULL)
    {
        return NULL;
    }
    if(c != TO_LOWER && c != TO_UPPER)
    {
        return NULL;
    }
    if(c == TO_LOWER)
    {
        to_lower((char)txt);
    }
    if(c == TO_UPPER)
    {
        to_upper((char)txt);
    }
    return txt;
}
char to_lower(txt)
{
    char *wtab = txt;
    while (*wtab != '\0')
    {
        if(*wtab >= 'A' && *wtab <= 'Z')
        {
            *wtab ^= 'A' ^ 'a';
        }
        wtab++;
    }
    return txt;

}
char to_upper(txt)
{
    char *wtab = txt;
    while (*wtab != '\0')
    {
        if(*wtab >= 'a' && *wtab <= 'z')
        {
            *wtab ^= 'A' ^ 'a';
        }
        wtab++;
    }
    return txt;
}

letter_changer.h :

#pragma once
enum letter_changer_t
{
    TO_LOWER = 'B',
    TO_UPPER = 'S'
};
char* change_letter_size(char *txt, enum letter_changer_t c);
char to_lower(char txt);
char to_upper(char txt);

Deklaracje funkcji podane w moim zadaniu muszą wyglądać tak i nie mogę ich zmienić:

char* change_letter_size(char *txt, enum letter_changer_t c)
char to_lower(char);
char to_upper(char);

Co mogę poprawić w kodzie aby pozbyć się tych błędów? Z góry bardzo dziękuję

1 odpowiedź

+2 głosów
odpowiedź 21 września 2020 przez tangarr Mędrzec (154,860 p.)

Funkcje to_lower() oraz to_upper() przyjmują (i zwracają) pojedynczy znak.
Funkcja change_letter_size() pracuje na łańcuchu znaków.

Najpierw popraw funkcje to_lower() i to_upper() tak aby działały i pracowały zgodnie ze specyfikacją (przyjmuje znak i zwraca znak).
Potem przerób funkcję change_letter_size() tak aby iterować po napisie i poprawnie wywoływać funkcje to_lower() / to_upper().

Podobne pytania

0 głosów
2 odpowiedzi 405 wizyt
pytanie zadane 7 lipca 2017 w C i C++ przez TheFeniks Gaduła (4,690 p.)
+1 głos
2 odpowiedzi 277 wizyt
pytanie zadane 25 grudnia 2020 w C i C++ przez TOWaD Mądrala (5,700 p.)

92,568 zapytań

141,424 odpowiedzi

319,632 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...