Problem z wczytaniem znaku

0

Chciałbym wiedzieć, czemu kod nie działa tak jak powinien, chodzi mi o to, aby funkcja wykonywała się dla znaku podanego przez użytkownika z konsoli, niestety nie wykonuje się ona, kiedy natomiast nie wczytuję znaku od uzytkownika działa poprawnie, proszę o wyjaśnienie i inny sposób zapisu

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>

int main()
{   char znak;
    scanf("%c",znak);
    printLine(6,znak);
}


void printLine(int width, char c)
{   int i;
    for(i=0;i<width;i++)
    {
        putchar(c);
    }

}

1

Jak ja to kompiluję, to dostaję takie ostrzeżenia i błędy kompilacji:

ee.c:1:9: warning: macro name is a reserved identifier [-Wreserved-id-macro]
#define _CRT_SECURE_NO_WARNINGS
        ^
ee.c:9:16: warning: format specifies type 'char *' but the argument has type 'int' [-Wformat]
    scanf("%c",znak);
           ~~  ^~~~
ee.c:10:5: warning: implicit declaration of function 'printLine' is invalid in C99 [-Wimplicit-function-declaration]
    printLine(6,znak);
    ^
ee.c:9:16: warning: variable 'znak' is uninitialized when used here [-Wuninitialized]
    scanf("%c",znak);
               ^~~~
ee.c:8:14: note: initialize the variable 'znak' to silence this warning
{   char znak;
             ^
              = '\0'
ee.c:13:6: error: conflicting types for 'printLine'
void printLine(int width, char c)
     ^
ee.c:10:5: note: previous implicit declaration is here
    printLine(6,znak);
    ^
ee.c:1:9: warning: macro is not used [-Wunused-macros]
#define _CRT_SECURE_NO_WARNINGS
        ^
5 warnings and 1 error generated.

Wszystkie tutaj faktycznie są problemem (być może poza _CRT_SECURE_NO_WARNINGS, bo rozumiem że trzeba takie rzeczy robić w Visual Studio czasem), aczkolwiek najważniejszym z nich jest ten:

ee.c:9:16: warning: format specifies type 'char *' but the argument has type 'int' [-Wformat]
    scanf("%c",znak);
           ~~  ^~~~
0

@enedil:
znalazłem drobny błąd, kod teraz działa

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>

int main()
{   char znak;
    scanf("%c",&znak);
    printLine(6,znak);
}


void printLine(int width, char c)
{   int i;
    for(i=0;i<width;i++)
    {
        putchar(c);
    }

}

0

@enedil: Właśnie sprawdziłem i kod i wyskakują mi warningi, ale kod działa mimo to , więc nie wiem o co chodzi

0

@Patryk Wielgosz: To dobra rada, bardzo często ostrzeżenia są istotne, nawet jeśli się wydaje, że działa. Szczególnie jako początkujący nie powinno się ich brać lekko.

1
Patryk Wielgosz napisał(a):

@enedil: Właśnie sprawdziłem i kod i wyskakują mi warningi, ale kod działa mimo to , więc nie wiem o co chodzi

My tez nie wiemy, bo nie wkleiłeś komunikatów tych warning'ów (i jakich linii dotyczą).

<source>: In function 'main':
<source>:7:5: warning: implicit declaration of function 'printLine' [-Wimplicit-function-declaration]
    7 |     printLine(6,znak);
      |     ^~~~~~~~~
<source>: At top level:
<source>:10:6: warning: conflicting types for 'printLine'
   10 | void printLine(int width, char c)
      |      ^~~~~~~~~
<source>:7:5: note: previous implicit declaration of 'printLine' was here
    7 |     printLine(6,znak);
      |     ^~~~~~~~~

Po poprawce: https://godbolt.org/z/EdTs9T

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