char kontra else / if

0

No i ponownie mam problemik.

#include <stdio.h>
#include <windows.h>
int main (void) 


{
char WA [4];
printf ("Podaj pierwsze dwa znaki: \n");
        scanf ("%3s", &WA);
        printf (" %s wybrano WA \n",WA);
        printf (" By kontynuowac wcisnij ENTER...");
        getch ();
        system ("cls");

 char WB [4];
 printf ("Podaj pierwsze dwa znaki: \n");
        scanf ("%3s", &WB);
        printf (" %s wybrano WB \n",WB);
        printf (" By kontynuowac wcisnij ENTER...");
        getch ();
        system ("cls");

return 0;
}

Wszystko działa cacy o ile podamy prawidłowo znaki WA i WB.
Gdy wpiszemy cokolwiek innego (1A, ER, 45, WYYY, CC) to wyskakują krzaki.

Program ma rozpoznawać tylko i wyłącznie pewien zakres.
Zakres ten to:
WA,WB,WD,WE,WF,WH,WI,WJ,WK,WL,WM,WN,WP,WR,WT,WU,WZ

Dla każdej z tych wartości będzie przypisany odpowiedni wynik (printf)
Chciał bym jednak by po wpisaniu np. WC wyświetlało się np. WC - nie ma takich znaków.

1

Wywala się dlatego, że robisz podstawowy błąd.
Przy wczytywaniu ciągu znaków nie dodajemy do zmiennej& w scanf, czyli powinno być scanf ("%3s", WA);, tak samo w drugim przypadku :)

0

Ktoś w innym wątku mi tak zapodał. Jeszcze nie doszedłem w teorii o co chodzi z tym znakiem & przed nazwą zmiennej.
Ale to działa:


/* załączenie bibliotek */

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

int main (void)

{

/* dane startowe programu oraz menu powitalne */

    char* autor = "Gavallon";
    char* wersja = "v2.01";
    char* data = "2017.04.21";
    char* nazwa = "Gavallonik";


HANDLE kolor;
        kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 12);

    printf ("\n\n\n");
    printf ("\t ------------------------------------------------------- \n");
    printf ("\t|\t *** Gavallon V2 - Witamy w programie *** \t|\n");
    printf ("\t -------------------------------------------------------\n\n");

        kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 7 );

    printf("\t Autor programu: %s \n", autor);
    printf("\t Wersja programu: %s \n", wersja);
    printf("\t Data utworzenia: %s \n\n\n\n", data);
    printf ("  ----------------------------------------------------------------- \n\n");
    printf ("  Program chcial by zaznajomic sie z uzytkownikiem i w tym celu bedzie wymagal \n");
    printf ("  wprowadzenia odpowiednich danych! \n\n\n");
    printf ("  Aby kontynuowac wcisnij dowolny klawisz!");

    getch();
system ("cls");

/* deklaracje stałych i zmiennych w programie */
/* powtorzenie menu jako stałego elementu w programie */

kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 12);

    printf ("\n\n\n");
    printf ("\t ------------------------------------------------------- \n");
    printf ("\t|\t *** Gavallon V2 - menu pobierania danych *** \t|\n");
    printf ("\t -------------------------------------------------------\n\n");

        kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 7 );
/* pobieranie danych od użytkownika */

    char imie [20];
    printf ("Podaj swoje imie: \n");
        scanf ("%19s", &imie);
        printf ("Twoje imie to: %s \n",imie);

    char wiek [3];
    printf ("Podaj swoj wiek: \n");
        scanf ("%2s", &wiek);
        printf ("Masz %s lat(a) \n",wiek);

    char miasto [30];
    printf ("Podaj nazwe miasta w ktorym mieszkasz: \n");
        scanf ("%29s", &miasto);
        printf ("Twoja miejscowosc to: %s \n\n\n",miasto);

        printf(" Program zebral juz potrzebne dane!\n\n");
        printf(" Masz na imie %s, masz %s lat(a) a Twoja miejscowosc to: %s \n\n", imie, wiek, miasto);

/* zmiana koloru dla komunikatu z ID użytkownika */
        kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 10);

            printf ("Od tej pory bedziesz tak identyfikowany(a)! \n");
            printf ("Aby zmienic powyzsze dane - zamknij i uruchom ponownie program \n");
            printf ("Aby kontynuowac z aktualnymi danymi wcisnij dowolny klawisz...");
            kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 7 );

            /* w późniejszym czasie zostanie dodana pętla do poprawy danych oraz zapytanie KONTYNUOWAC T/N?  */
            getch();
system ("cls");

   /* strona startowa z ID usera - zwane dalej MENU */

    kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 12);

    printf ("\n\n\n");
    printf ("\t ------------------------------------------------------- \n");
    printf ("\t|\t *** Gavallon V2 -                   *** \t|\n");
    printf ("\t ------------------------------------------------------- \n");

        kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 10 );
        /* dane użytkownika pod menu */

        printf ("\tUzytkownik: %s \n \tMiejscowosc: %s \n \tWiek: %s \n\n\n\n", imie, miasto, wiek);

        kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 7 );

/* zaczynamy zbierac dane na temat posiadanego samochodu */

    printf("W tej chwili program zacznie zbierac dane dot. Twojego pojazdu \n");

        char marka [15];
            printf ("Podaj marke pojazdu: \n");
                scanf ("%14s", &marka);
        char model [15];
            printf ("Podaj model pojazdu: \n");
                scanf ("%14s", &model);
        char tablice [10];
            printf ("Podaj numer rejestracyjny: \n");
                scanf ("%9s", &tablice);
        char d_produkcji [5];
            printf ("Rok produkcji: \n");
                scanf ("%4s", &d_produkcji);
        char d_badan [10];
            printf ("Wpisz date waznosci badan technicznych w formacie YYYYMMDD: \n");
                scanf ("%9s", &d_badan);
        char przebieg [10];
            printf ("Wpisz aktualny przebieg auta: \n");
                scanf ("%9s", &przebieg);

                /* podsumowanie danych pojazdu użytkownika */
                kolor = GetStdHandle( STD_OUTPUT_HANDLE );
                    SetConsoleTextAttribute( kolor, 10 );
                printf("Program zanotowal ponizsze dane: \n");
                kolor = GetStdHandle( STD_OUTPUT_HANDLE );
                    SetConsoleTextAttribute( kolor, 7 );
                printf("Marka: %s \n", marka);
                printf("Model: %s \n", model);
                printf("Numer rejestracyjny: %s \n", tablice);
                printf("Aktualny przebieg: %s \n", przebieg);
                printf("Rocznik: %s \n\n\n\n", d_produkcji);
                printf("Od tej chwili dane pojazdu sa przypisane do Twojego imienia! \n");
                printf("Wcisnij dowolny klawisz by kontynowac!");
                getch();

system ("cls");

/* dopisanie danych o pojezdzie do tzw. MENU */

    kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 12);

    printf ("\n\n\n");
    printf ("\t ------------------------------------------------------- \n");
    printf ("\t|\t *** Gavallon V2 -                   *** \t|\n");
    printf ("\t ------------------------------------------------------- \n");

        kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 10 );
        /* dane użytkownika pod menu */

        printf ("\tUzytkownik: %s \n \tMiejscowosc: %s \n \tWiek: %s \n", imie, miasto, wiek);
        printf ("\tMarka pojazdu: %s \n \tModel: %s \n \tData produkcji: %s \n \tNumer rejestracyjny: %s \n \tPrzebieg: %s KM \n", marka, model, d_produkcji, tablice, przebieg);

        kolor = GetStdHandle( STD_OUTPUT_HANDLE );
            SetConsoleTextAttribute( kolor, 7 );

        /* TESTOWANIE ZAPYTAŃ - TAK / NIE */

        printf ("Program jest gotowy do dalszej pracy ... \n ");
        printf ("JESTEŚ GOTOWY(A)  T/N  ??   \n ");
getch ();

{
int wyjscie=0;
char kontynuj;
while(wyjscie == 0)

printf("\nCzy chcesz kontynuowac? (t/n): ");
getchar();
scanf("%c", kontynuj);

if(kontynuj == 't')
if(kontynuj == 'n')

wyjscie = 1;
else

printf("Podales bledna litere!\n");

}

return 0;


}

i w tym programie na końcu mam problem z pytaniem "Czy kontynuować T/N?"
Chciał bym by program reagował tylko na klawisze T/N
Kontynuowanie idzie dalej po kodzie ... a N wyświetla "dziękujemy" i program się kończy.
Na podstawie tego chciałem wykonać programik z pierwszego kodu w tym poście.

0

Jak napisać najprostszą funkcję dla czegoś takiego:

  1. pobierz z klawiatury zestaw znaków
  2. jeśli pobrane znaki to AB to wyświetl coś i kontynuuj (dalej po kodzie już w inną funkcją)
  3. jeśli pobrane znaki są inne jak AB to wyświetl że znaki są złe i wróć ponownie do tej samej funkcji do skutku...

Chciał bym zapodać do programu stałe które rozpoznawały by prawidłowe znaki ...
Powiedzmy WA, WB, WD, WC są znakami dla których będzie wyświetlany osobny komunikat a w przypadku wyboru np. znaków UP, PO, WE, 45 lub innych będzie
wyświetlony błąd i funkcja zapętli się do czasu otrzymania prawidłowych znaków...

1

Takie zapętlanie się, możesz np. zrobić tak:

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

int main (void)
{
    char signs[20];
    do
    {
    printf("Wprowadz ciag znakow: ");
    fflush(stdin);
    scanf("%s", signs);
    }while(strcmp(signs,"AB")!=0);

    return 0;
}

Proponuję poczytać o funkcjach zawartych w <string.h> na pewno się przydadzą podczas działania na łańcuchach znaków :)

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