Tablica znaków

0

witam,
mam problem z tablica znakow a mianowicie nie wiem jak sie do nich odwolac

char samogloski1[10] = {'A','Ą','E','Ę','I','O','Ó','U','Y','\0'};

jak próbuje w ten sposób wypisuje mi tylko 1 znak i to inny jak w tablicy

for (i = 0; i <10; i++);
{
    printf("%C",samogloski1[i]);
}
0

jak próbuje w ten sposób wypisuje mi tylko 1 znak i to inny jak w tablicy

No a ile ma wypisać? Wypisujesz 10 razy po 1 znaku (btw. nie wiem czy %C jest zgodny ze standardem - na wszelki wypadek lepiej używać %c)...
Jeśli i tak chcesz wypisać wszystkie to prościej będzie napisać printf("%s",samogloski1);
A co do dziwnych znaków, zainteresuj się funkcją SetConsoleCP ( http://msdn.microsoft.com/en-us/library/ms686013%28VS.85%29.aspx )

0

konkretnie to chodzi mi o cos w tym stylu, że wprowadzam litere i porównuje tą wprowadzana litere z tym co jest w tablicy samoglosek jesli tak to cos robi jesli nie to robi cos innego.

 printf("Podaj samogloske= ");
 scanf("%c",&sa);
     for (i = 0; i < 10; i++);
      {
         if (samogloski1[i]==sa) {
                                           to cos tam ma robic
                                         }
       else{
                tez cos ma robic
             }
       }
0

Najprostszy błąd na świecie

for (i = 0; i <10; i++);
{
    printf("%C",samogloski1[i]);
}

Po pętli zlikwiduj ten średnik. W tym momencie, to co chciałeś aby było traktowanie jako ciało pętli, było po prostu jedną instrukcją, bo średnik 'zamykał' pętlę.

0

Błąd, o którym piszecie swoją drogą, drugą sprawę jest obsługa polskich znaków. Gdy wpiszemy "ą", scanf wcale nam tego "ą" nie wczyta. Nie ma tak fajnie jak w .NET, gdzie konsola domyślnie i w pełni obsługuje Unicode. Konsola, z którą zgodna ma być implementacja biblioteki C pojawiła się jeszcze przed wprowadzeniem Unicode i trzeba się trochę pobawić, żeby to zadziałało.

Na początek powiem, że korzystanie z Unicode jest zalecane. Mamy 2011 rok i w przeciwieństwie do 1980, teraz każdy te swoje hieroglify może wpisywać :). Nawet jeżeli w tej chwili Unicode nie jest ci do końca potrzebne, to w przyszłości będziesz pisać program i w końcu się okaże, że trzeba przetłumaczyć aplikację na grecki i będzie problem. Dlatego myślmy o tym od samego początku.
Pierwszą rzeczą, którą trzeba zmienić to sposób przechowywania znaków. char jest jednobajtowy, a Unicode potrzebuje przecież 2 bądź 4 bajtów. I tak mamy do dyspozycji typ wchar_t. Na Windows domyślnie ma 2 bajty (UTF-16), na Linuksach 4 (UTF-32).
W Windows domyślnie konsola ma stare, dosowe kodowanie języka, który masz ustawiony (OEM). Żeby napisać/pobrać znak (napis) w Unicode, trzeba go przekonwertować. Są do tego funkcje, odpowiednio CharToOem i OemToChar, które konwertują Unicode do/z obecnie ustawionego kodowania OEM. Ale po co konwertować.. jeżeli możemy zmienić kodowanie konsoli?! Oczywiście, że można, ale mamy nieprzyjemnego buga, że możemy zmienić stdout (wyjście), a stdin jest zabugowane (tutaj artykuł: http://blogs.msdn.com/b/michkap/archive/2010/09/23/10066660.aspx).
Dlatego pod Windows, ustawimy sobie stdout na Unicode poprzez setlocale. Niestety, żeby pobrać znak/napis, będziemy musieli go przekonwertować.
Pod linuksową implementację biblioteki C żadnego buga nie ma i wystarczy setlocale, żeby wprintf oraz wscanf działały w porządku.

Oto kod, który skompiluje się i będzie działać zarówno pod Windows jak i Linuksem (OemToChar przyjmuje napis zakończony \0, stąd te zabawy z dwuelementowymi tablicami):

#if defined WIN32
	#include <Windows.h>
#endif

#include <stdio.h>
#include <wchar.h>

#include <locale.h>

int main()
{
#if defined WIN32
	setlocale(LC_ALL, "polish");
#else
	setlocale(LC_ALL, "pl_PL.UTF-8");
#endif

	wchar_t vowels[] = L"AĄEĘIOÓUYaąeęioóuy";
	wprintf(L"Samogłoski: %ls\n", vowels);

	wchar_t letter;

#if defined WIN32
	char input_oem[] = " ";
	scanf("%c", input_oem);
#else
	wscanf(L"%lc", &letter);
#endif

#if defined WIN32
	wchar_t input[2];
	OemToChar(input_oem, input);
	letter = input[0];
#endif

	if(wcschr(vowels, letter) == NULL || !iswalpha(letter))
		wprintf(L"Nie podano samogłoski\n");
	else
		wprintf(L"Podano samogłoskę \"%lc\"\n", letter);

	return 0;
}

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